关于BOOST_FOREACH
的大量问题促使我向Boost库的用户询问他们正在做什么(如果有的话)来准备他们的代码以便移植到提议的新C ++标准(又名C ++ 0x)。例如,如果您使用shared_ptr
:
#ifdef CPPOX
#include <memory>
#else
#include "boost/shared_ptr.hpp"
#endif
还存在命名空间问题 - 将来,shared_ptr
将成为std
命名空间的一部分 - 您如何处理?
我对这些问题感兴趣,因为我决定咬紧牙关并认真开始学习提升,我想在我的代码中使用最佳实践。
不是大量的答案 - 这是否意味着它不是问题?无论如何,感谢那些回复的人;我接受jalfs的答案,因为我喜欢被建议什么都不做!
答案 0 :(得分:14)
简单的答案是“什么都不做”。 Boost不会删除被采用为0x的库。所以boost :: shared_ptr仍然存在。所以你不需要做任何事情来保持可移植性。
当然,一旦0x在这里,很多代码可以简化,清理和优化,但由于它还没有在这里,所以这项工作无法真正开始。所有你能做的就是确保你的代码在0x命中时仍然可以编译......它应该就是这样。 Boost不会删除一半的库。 (我不是猜测。他们之前在他们的邮件列表上说过这个)
(如果你想切换到标准的shared_ptr,我会说在时机成熟时进行简单的搜索/替换可能更容易。用#include <boost/shared_ptr.hpp>
替换#include <memory>
,{ {1}}与boost::shared_ptr
)
当然,您可以决定使用Boost std::shared_ptr
来保留项目。仅仅因为它被添加到标准库并不意味着 使用它,毕竟。
答案 1 :(得分:2)
由于命名空间,不需要做任何事情。如果你想使用boost实现,你仍然会使用boost namesapce。
我认为他们不会冒险破坏以前版本的兼容性。
请在此处查看我之前的类似问题:what will happen with the overlapping portion of boost once C++0x becomes mainstream?
但是当然如果你在代码中使用了很多命名空间,你可能会有一些重叠的定义。您必须返回到每次使用时明确指定命名空间。
答案 2 :(得分:2)
在C ++ 0x和Boost之间使用共享部分的最佳方法是使用Boost.TR1,即;如果技术报告已被接受,则执行。 Boost.TR1将使用编译器提供的实现,否则由Boost提供。这是Boost.TR1的主要目标
“TR1库提供了标准库扩展的C ++技术报告的实现。这个库本身并不实现TR1组件,而是一个包含标准库的TR1实现(如果有的话)的瘦包装,否则它将包含Boost Library的等价物,并将它们导入名称空间std :: tr1。“
答案 3 :(得分:1)
不,我们现在还没有,事实是:
但是,是的,我们确实在需要时使用Boost(当然,只有在发布完成卫生阶段之后我们才会使用它),就像我们使用的任何其他第三方库一样。此外,我们会根据需要使用源表单。
然而,在产品设计阶段(例如移动转移器等),有更努力地采用更严格的驱动原则。
当C ++ 0x标准化时,肯定会有一些工作;但这也需要我们继续使用一些较新的编译器(vc10?),继续使用新的编译器总是一个任务。
答案 4 :(得分:1)
您可能实际上总是喜欢使用Boost版本很长一段时间。特别是如果你需要在多个平台上编译。
Boost库在多个平台上移植和测试,并且在那里表现相同(大部分时间。)
新的C ++库的第一个供应商实现可能仍然包含小错误和性能差异,就像添加STL和std命名空间时一样混乱。