﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-why</title><link>http://www.cppblog.com/why/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:37:10 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:37:10 GMT</pubDate><ttl>60</ttl><item><title>[转]多处理器环境和线程同步的高级话题</title><link>http://www.cppblog.com/why/archive/2010/11/15/133641.html</link><dc:creator>why</dc:creator><author>why</author><pubDate>Mon, 15 Nov 2010 05:11:00 GMT</pubDate><guid>http://www.cppblog.com/why/archive/2010/11/15/133641.html</guid><wfw:comment>http://www.cppblog.com/why/comments/133641.html</wfw:comment><comments>http://www.cppblog.com/why/archive/2010/11/15/133641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/why/comments/commentRss/133641.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/why/services/trackbacks/133641.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原子操作和 volatile 关键字 <br>全局对象初始化时的线程安全性和相互依赖性问题 <br>局部静态对象初始化时的线程安全性问题 &nbsp;&nbsp;<a href='http://www.cppblog.com/why/archive/2010/11/15/133641.html'>阅读全文</a><img src ="http://www.cppblog.com/why/aggbug/133641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/why/" target="_blank">why</a> 2010-11-15 13:11 <a href="http://www.cppblog.com/why/archive/2010/11/15/133641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++中处理Python的异常</title><link>http://www.cppblog.com/why/archive/2010/11/08/132999.html</link><dc:creator>why</dc:creator><author>why</author><pubDate>Mon, 08 Nov 2010 08:08:00 GMT</pubDate><guid>http://www.cppblog.com/why/archive/2010/11/08/132999.html</guid><wfw:comment>http://www.cppblog.com/why/comments/132999.html</wfw:comment><comments>http://www.cppblog.com/why/archive/2010/11/08/132999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/why/comments/commentRss/132999.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/why/services/trackbacks/132999.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:      服务器用的脚本是Python，但是对脚本中的错误异常信息提示总是不好。有的打印不出来，有时打印的是错误的。我对此早就深恶痛绝！前几天一个由于脚本中import来的脚步语法有错，导致总是加载不成功，服务器运行不起来的问题浪费了我一上午的时间，牺牲了无数脑细胞，终于忍受不了了。用了两天多时间，终于彻底解决了这个问题，定义函数如下，如果Python脚本加载或者调用出错，调用下面这个函数就可以将错误信息记录在字符串中。&nbsp;&nbsp;<a href='http://www.cppblog.com/why/archive/2010/11/08/132999.html'>阅读全文</a><img src ="http://www.cppblog.com/why/aggbug/132999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/why/" target="_blank">why</a> 2010-11-08 16:08 <a href="http://www.cppblog.com/why/archive/2010/11/08/132999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于模板元编程</title><link>http://www.cppblog.com/why/archive/2010/11/01/132008.html</link><dc:creator>why</dc:creator><author>why</author><pubDate>Mon, 01 Nov 2010 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/why/archive/2010/11/01/132008.html</guid><wfw:comment>http://www.cppblog.com/why/comments/132008.html</wfw:comment><comments>http://www.cppblog.com/why/archive/2010/11/01/132008.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/why/comments/commentRss/132008.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/why/services/trackbacks/132008.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模板元编程（Template Metaprogramming）更准确的含义应该是&#8220;编&#8216;可以编程序的&#8217;程序&#8221;，而模板元程序（Template Metaprogram）则是&#8220;&#8216;可以编程序的&#8217;程序&#8221;。也就是说，我们给出代码的产生规则，编译器在编译期解释这些规则并生成新代码来实现我们预期的功能。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模板元编程由于把运算由执行时提前到了编译时，所以其一个特点是运行时很快，效率很高！不过这是以编译耗时为代价的。这个作用主要体现在复杂的数值运算时。另外一个特点是能解决普通的C++程序无法解决的问题，这时才是模板元编程大显身手的时候。这个作用体现在类型识别和处理时。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为模板参数都要是编译时常量，而我们的运算需求大部分时候应该都是对变量的运算，所以我认为模板元编程解决数值运算问题可能意义不大，可能主要是用来封装在泛型库底层来完成复杂的类型处理功能。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 还有我觉得最大的问题是，模板元编程就如同正则表达式等一些技术一样，作用很强大，但是用到的地方似乎很少，以至于学习和练习都找不到施展空间~O(&#8745;_&#8745;)O~</p>
<img src ="http://www.cppblog.com/why/aggbug/132008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/why/" target="_blank">why</a> 2010-11-01 16:58 <a href="http://www.cppblog.com/why/archive/2010/11/01/132008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>考虑virtual函数以外的其他选择</title><link>http://www.cppblog.com/why/archive/2010/10/25/131174.html</link><dc:creator>why</dc:creator><author>why</author><pubDate>Mon, 25 Oct 2010 06:29:00 GMT</pubDate><guid>http://www.cppblog.com/why/archive/2010/10/25/131174.html</guid><wfw:comment>http://www.cppblog.com/why/comments/131174.html</wfw:comment><comments>http://www.cppblog.com/why/archive/2010/10/25/131174.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/why/comments/commentRss/131174.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/why/services/trackbacks/131174.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设计类的成员函数的架构，在继承体系中，除了直接定义virtual函数外，还应当考虑以下几种方案：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1。由Non-Virtual Interface手法实现Template Method模式</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NVI手法：令客户通过publicnon-virtual成员函数间接调用private vritual函数。这就是Template Method设计模式的一个独特表现形式。这个non-virtual函数称为virtual函数的外覆器（wrapper）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2。有Function Pointers实现Strategy模式</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类中存储的是函数指针</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3。有tr1::function完成Strategy模式</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;类中存储的是函数对象，相比前者，好处是允许客户在计算是使用任何与函数对象相兼容的可调用物。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4。古典的Strategy模式</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;类存储的是策略类对象的指针。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;各自优缺点：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;直接的virtual和NVI手法，面向对象组织结构很明确，但是扩展性不强。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Strategy模式：扩展性强，灵活。但是将机能从成员函数移到class外部函数的缺点是，非成员函数无法访问class的non-public成员。</p>
<img src ="http://www.cppblog.com/why/aggbug/131174.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/why/" target="_blank">why</a> 2010-10-25 14:29 <a href="http://www.cppblog.com/why/archive/2010/10/25/131174.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模板小结</title><link>http://www.cppblog.com/why/archive/2010/10/09/129224.html</link><dc:creator>why</dc:creator><author>why</author><pubDate>Sat, 09 Oct 2010 09:30:00 GMT</pubDate><guid>http://www.cppblog.com/why/archive/2010/10/09/129224.html</guid><wfw:comment>http://www.cppblog.com/why/comments/129224.html</wfw:comment><comments>http://www.cppblog.com/why/archive/2010/10/09/129224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/why/comments/commentRss/129224.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/why/services/trackbacks/129224.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------摘自《C++ Primer中文版》&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模板是C++语言与众不同的特性，是标准库的基础。模板是独立于类型的蓝图，编译器可以用它产生多种特定类型的实例。我们只需编写一次模板，编译器将为使用模板的不同类型实例化模板。既可以编写函数模板又可以编写类模板。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;函数模板是建立算法库的基础，类模板是建立标准库容器和迭代器类型的基础。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 非类型模板实参必须是编译时常量表达式。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编译模板需要编程环境的支持。语言为实例化模板定义了两个主要策略：包含模型和分别编译模型。这些模型规定了模板定义应该放在头文件还是源文件中，就此而言，它们影响着构建系统的方式。现在，所有编译器实现了包含模型，只有一些编译器实现了分别编译模型。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显式模板实参使我们能够固定一个或多个模板形参的类型或值。显式实参使我们能够设计无需从对应实参推断模板类型的函数，也使我们能够对实参进行转换。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模板特化是一种特化的定义，它定义了模板的不同版本，讲一个或多个形参绑定到特定类型或特定值。对于默认模板定义不适用的类型，特化非常有用。</p>
<img src ="http://www.cppblog.com/why/aggbug/129224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/why/" target="_blank">why</a> 2010-10-09 17:30 <a href="http://www.cppblog.com/why/archive/2010/10/09/129224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix哲学</title><link>http://www.cppblog.com/why/archive/2010/09/25/127625.html</link><dc:creator>why</dc:creator><author>why</author><pubDate>Sat, 25 Sep 2010 08:51:00 GMT</pubDate><guid>http://www.cppblog.com/why/archive/2010/09/25/127625.html</guid><wfw:comment>http://www.cppblog.com/why/comments/127625.html</wfw:comment><comments>http://www.cppblog.com/why/archive/2010/09/25/127625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/why/comments/commentRss/127625.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/why/services/trackbacks/127625.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Unix哲学之一言以蔽之——KISS。Keep It Simple,Stupid!<br>要良好地运用Unix哲学，你需要具备（或者找回）这种态度。你需要用心。你需要去游戏。你需要乐于探索。&nbsp;&nbsp;<a href='http://www.cppblog.com/why/archive/2010/09/25/127625.html'>阅读全文</a><img src ="http://www.cppblog.com/why/aggbug/127625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/why/" target="_blank">why</a> 2010-09-25 16:51 <a href="http://www.cppblog.com/why/archive/2010/09/25/127625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>