准备下一个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的回答,因为我喜欢别人建议我什么都不要做不,鉴于以下事实,我们目前还没有:
- 在各种平台(我们需要)和
- 它还没有被正式宣布为标准
#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个月内出来:)不管怎样,代码都不会编译,所以不会有任何问题;)