准备下一个C++;标准 >关于代码> Boost的前文> /Cord>的问题促使我询问Boost库的用户(如果有什么),他们准备为新的C++标准(AKA C++ 0X)编写可移植性代码。例如,如果您使用shared\u ptr,您是否编写这样的代码: #ifdef CPPOX #include <memory> #else #include "boost/shared_ptr.hpp" #endif #ifdef CPPOX #包括 #否则 #包括“增压/共享_ptr.hpp” #恩迪夫

准备下一个C++;标准 >关于代码> Boost的前文> /Cord>的问题促使我询问Boost库的用户(如果有什么),他们准备为新的C++标准(AKA C++ 0X)编写可移植性代码。例如,如果您使用shared\u ptr,您是否编写这样的代码: #ifdef CPPOX #include <memory> #else #include "boost/shared_ptr.hpp" #endif #ifdef CPPOX #包括 #否则 #包括“增压/共享_ptr.hpp” #恩迪夫,c++,boost,c++11,C++,Boost,C++11,还有名称空间问题-将来,shared_ptr将成为std名称空间的一部分-您如何处理这个问题 我对这些问题很感兴趣,因为我决定咬紧牙关,开始认真学习boost,并且我希望在代码中使用最佳实践 不完全是一堆答案-这是否意味着这不是一个问题?无论如何,感谢那些回复的人;我接受jalfs的回答,因为我喜欢别人建议我什么都不要做不,鉴于以下事实,我们目前还没有: 在各种平台(我们需要)和 它还没有被正式宣布为标准 但是,是的,我们确实在需要时使用Boost(当然,只有在发布经过一个卫生阶段后,我们才

还有名称空间问题-将来,
shared_ptr
将成为
std
名称空间的一部分-您如何处理这个问题

我对这些问题很感兴趣,因为我决定咬紧牙关,开始认真学习boost,并且我希望在代码中使用最佳实践


不完全是一堆答案-这是否意味着这不是一个问题?无论如何,感谢那些回复的人;我接受jalfs的回答,因为我喜欢别人建议我什么都不要做不,鉴于以下事实,我们目前还没有:

  • 在各种平台(我们需要)和
  • 它还没有被正式宣布为标准
但是,是的,我们确实在需要时使用Boost(当然,只有在发布经过一个卫生阶段后,我们才会使用它),就像我们使用的任何其他第三方库一样。此外,我们根据需要使用源表单

然而,在产品设计阶段(如move-ctor等),需要更加严格地采用驱动原则

当C++0x标准化后,肯定会有一些工作要做;但这也需要我们转向一些较新的编译器(vc10?),而转向一个新的编译器本身就是一项任务。

简单的答案是“什么都不做”。Boost不会删除0x中采用的库。所以boost::shared_ptr仍然存在。所以你不需要做任何事情来保持可移植性

当然,一旦0x出现在这里,很多代码都可以简化、清理和优化,但由于还没有出现,这项工作就无法真正开始。您所能做的就是确保代码在0x命中时仍能编译。。。应该是这样的。Boost不会删除他们一半的库。(我不是在猜测。他们以前在邮件列表中已经说明了这一点)

(如果你想切换到标准的共享ptr,我想说,到时候只需进行简单的搜索/替换可能会更容易。将
#include
替换为
#include
,将
boost::shared_ptr
替换为
std::shared_ptr


当然,您也可以决定继续使用Boost的
shared\u ptr
的项目。仅仅因为它被添加到了标准库中,并不意味着您就必须使用它。

由于名称空间的原因,无需执行任何操作。如果您想使用boost实现,您仍将使用boost名称apce

我不认为他们会冒险以如此大的方式破坏与以前版本的兼容性

请参见我前面的类似问题:


但当然,如果您在代码中大量使用名称空间,可能会有一些重叠的定义。您必须返回到每次使用时显式指定名称空间

实际上,您可能总是喜欢长时间使用Boost版本。特别是当您需要在多个平台上编译时

Boost库在多个平台上进行移植和测试,并且在那里(大多数情况下)表现相同


<> P>新的C++库的第一个供应商实现可能仍然包含小的bug和性能差异,就像在添加STL和STD命名空间时一样混乱。p> 在C++0x和Boost之间使用共享部分的最佳方法是使用Boost.TR1,即;如果技术报告已被接受,则执行。Boost.TR1将在编译器提供的实现可用时使用,否则将使用Boost提供的实现。这是Boost.TR1的主要目标


“T1库提供了标准库扩展的C++技术报告的实现。这个库本身并不实现Tr1组件,而是一个薄的包装器,它将包含您的标准库的Tr1实现(如果它有一个),否则它将包括Boost库等价物,并将它们导入命名空间std::tr1。”

什么都不做当然是一个有吸引力的选择,但可行吗?我不希望在我的代码库中有两个共享的\u ptr实现,这可能是调试和支持的噩梦。@Neil Butterworth:你在暗示名称空间冲突。这是可以避免的。请检查我的编辑。我认为切换实现的最简单方法是在升级到0x之后进行简单的搜索/替换。在那之前,我会避免额外的#ifdef混乱,并同时支持它们。@jalf:+1。我同意:)我感觉很多人都会这么做。你是说C++09,对吗?它必须在8个月内出版:)@Robert:你是说,到目前为止,它计划在8个月内出版。离决赛还有很长的路要走。但是,是的,我想很多人会失望,如果他们没有完成09年的最后期限。(顺便说一句,我真的开始喜欢c++0x这个名字了。他们就不能坚持下去吗?;)我想他们应该叫它c++1x,放弃0x,剩下的工作太多了,现在的状态一团糟,但是如果他们不改变最后期限,它必须在8个月内出来:)不管怎样,代码都不会编译,所以不会有任何问题;)