﻿<?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++博客-Design&amp;Art-随笔分类-BOOST</title><link>http://www.cppblog.com/abware/category/4932.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 22 May 2008 02:12:04 GMT</lastBuildDate><pubDate>Thu, 22 May 2008 02:12:04 GMT</pubDate><ttl>60</ttl><item><title>[ZZ]智能指针的标准之争：Boost vs. Loki</title><link>http://www.cppblog.com/abware/archive/2007/08/21/30495.html</link><dc:creator>安帛伟</dc:creator><author>安帛伟</author><pubDate>Tue, 21 Aug 2007 01:00:00 GMT</pubDate><guid>http://www.cppblog.com/abware/archive/2007/08/21/30495.html</guid><wfw:comment>http://www.cppblog.com/abware/comments/30495.html</wfw:comment><comments>http://www.cppblog.com/abware/archive/2007/08/21/30495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/abware/comments/commentRss/30495.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/abware/services/trackbacks/30495.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 　　在现在的标准C++中，只有一种智能指针：std::auto_ptr。其原因并非是因为auto_ptr 已足以应付所有相关的工作——实际上，auto_ptr 有一个重大的缺陷，就是它不能被用在STL 容器中——而是因为现在的C++标准在制定时并未能对智能指针进行全面的考察。按照C++标准委员会成员Herb Sutter 的说法，只有一种标准的智能指针是一件“可羞”的事情：首先，智能指针所能做的许多有用的事情，是可怜的auto_ptr 不能完成的；其次，在有些情况下使用auto_ptr 可能会造成问题，上面所说的不能在容器中使用就是一例。实际上，许多程序员已经开发了各种有用的智能指针，有些甚至在auto_ptr 被定为标准之前就已存在，但问题是，它们不是标准的。在这样的情况下，C++标准委员会考虑引入新的智能指针，也就是自然而然的事情了。目前进入委员会视野的，主要有两种智能指针方案：Boost 智能指针和Loki 智能指针。前者是由C++标准委员会库工作组发起的Boost 组织开发的，而后者由世界级的C++专家Andrei Alexandrescu 开发，并在他所著的“Modern C&nbsp;&nbsp;<a href='http://www.cppblog.com/abware/archive/2007/08/21/30495.html'>阅读全文</a><img src ="http://www.cppblog.com/abware/aggbug/30495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/abware/" target="_blank">安帛伟</a> 2007-08-21 09:00 <a href="http://www.cppblog.com/abware/archive/2007/08/21/30495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ZZ]Boost使用的编译系统</title><link>http://www.cppblog.com/abware/archive/2007/08/18/30288.html</link><dc:creator>安帛伟</dc:creator><author>安帛伟</author><pubDate>Fri, 17 Aug 2007 16:03:00 GMT</pubDate><guid>http://www.cppblog.com/abware/archive/2007/08/18/30288.html</guid><wfw:comment>http://www.cppblog.com/abware/comments/30288.html</wfw:comment><comments>http://www.cppblog.com/abware/archive/2007/08/18/30288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/abware/comments/commentRss/30288.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/abware/services/trackbacks/30288.html</trackback:ping><description><![CDATA[<p><strong><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>介绍：</span><span>
<p></span></font></strong></p>
<p><font size=3><span><font face="Times New Roman">Boost</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>使用的编译系统叫做</span><span><font face="Times New Roman">Boost.Jam(Bjam)</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>，是一个基于</span><span><font face="Times New Roman">FTJam</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的构造工具，而</span><span><font face="Times New Roman">FTJam</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>又基于</span><span><font face="Times New Roman">Perforce Jam</font></span></font></p>
<p><span Times Roman?; mso-hansi-font-family: ?Times New Roman??><font size=3>细节：</font></span></p>
<p><font size=3><span><font face="Times New Roman">Jam</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>是</span><span><font face="Times New Roman">make(1)</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（如果你使用</span><span><font face="Times New Roman">UNIX</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>就知道</span><span><font face="Times New Roman">make(1)</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>是什么，在这里简单说明，</span><span><font face="Times New Roman">make(1)</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>是指系统工具类中，名叫</span><span><font face="Times New Roman">make</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的东西）的一个替代品，</span><span><font face="Times New Roman">Jam</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的目标是让构造简单的东西更加容易，而让构造复杂的东西变得简单。下面是一个例子：</span></font></p>
<pre><span><font face=Courier size=3>Main smail : main.c map.c resolve.c deliver.c</font></span></pre>
<pre><span><font size=3><font face=Courier><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>misc.c parser.y alias.c pw.c headers.c</font></font></span></pre>
<pre><span><font size=3><font face=Courier><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>scanner.l getpath.c str.c ;</font></font></span></pre>
<p><span><font face=宋体 size=3>Smail从一打文件进行构造.Jam自动管理依赖的头文件.</font></span></p>
<p><span><font face=宋体 size=3>Jam非常易于移植:它能在UNIX，VMS，Mac和NT平台上.多数Jamfiles在上述平台上本身就是可移植的.</font></span></p>
<p><span><font face=宋体 size=3>Jam is unintrusive: it is small, it has negligible CPU overhead, and it doesn't create any of its own funny files (c.f. Odin, nmake, SunOS make).</font></span></p>
<p><span><font face=宋体 size=3>Jam can build large projects spread across many directories in one pass, without recursing, tracking the relationships among all files. Jam can do this with multiple, concurrent processes.</font></span></p>
<p><span><font face=宋体 size=3>Jam isn't under the blinkin GNU copyright, so you can incorporate it into commercial products.</font></span></p>
<p><span>
<p><font face="Times New Roman" size=3>&nbsp;</font></p>
</span>
<p>&#160;</p>
<p><strong><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>构造</span><span><font face="Times New Roman">Boost.Jam
<p></font></span></font></strong></p>
<p><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>构造好了</span><span><font face="Times New Roman">Bjam</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>以后，要安装它只需要将生成的执行文件拷贝到</span><span><font face="Times New Roman">PATH</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>变量指定的某个路径下就可以了。各个平台都有相应平台的初始构造脚本用来构造可执行程序。这些脚本都接收一个可选参数，用来编译构造的工具集的名称。如果没有给工具集参数没有给，或做可用工具集的检测，并选用一个。构造脚本接受的参数如：</span></font></p>
<pre><span><font face=Courier size=3>&lt;build script name&gt; [toolset]</font></span></pre>
<p><span Times Roman?; mso-hansi-font-family: ?Times New Roman??><font size=3>无参数的运行脚本可能是最好的选择。</font></span></p>
<p><span>
<p><font face="Times New Roman" size=3>&nbsp;</font></p>
</span>
<p>&#160;</p>
<p><span><font size=3><font face=宋体>Boost发布的Boost.Jam的源代码在<tt>BOOST_ROOT/tools/build/jam_src.</tt></font></font></span></p>
<p><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>如果脚本检测适当的工具集失败可能是因为你的工具集不能自动检测。在这些情况下，你需要在脚本参数那里指定工具集，当然这假定工具集在</span><span><font face="Times New Roman">PATH</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>中可以找到</span><span><font face="Times New Roman">.</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>注意：编译</span><span><font face="Times New Roman">Boost.Jam</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的工具集和构造</span><span><font face="Times New Roman">Boost</font></span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的工具集是独立的。</span></font><span>
<p></span></p>
<img src ="http://www.cppblog.com/abware/aggbug/30288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/abware/" target="_blank">安帛伟</a> 2007-08-18 00:03 <a href="http://www.cppblog.com/abware/archive/2007/08/18/30288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>