﻿<?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-随笔分类-Effective C++</title><link>http://www.cppblog.com/why/category/15273.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 16 Nov 2010 03:05:19 GMT</lastBuildDate><pubDate>Tue, 16 Nov 2010 03:05:19 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>考虑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></channel></rss>