准备下一个C ++标准

时间:2009-04-04 11:03:53

标签: c++ boost c++11

关于BOOST_FOREACH的大量问题促使我向Boost库的用户询问他们正在做什么(如果有的话)来准备他们的代码以便移植到提议的新C ++标准(又名C ++ 0x)。例如,如果您使用shared_ptr

,是否编写了这样的代码?
#ifdef CPPOX
#include <memory>
#else
#include "boost/shared_ptr.hpp"
#endif

还存在命名空间问题 - 将来,shared_ptr将成为std命名空间的一部分 - 您如何处理?

我对这些问题感兴趣,因为我决定咬紧牙关并认真开始学习提升,我想在我的代码中使用最佳实践。

不是大量的答案 - 这是否意味着它不是问题?无论如何,感谢那些回复的人;我接受jalfs的答案,因为我喜欢被建议什么都不做!

5 个答案:

答案 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)

不,我们现在还没有,事实是:

  • 支持C ++ 0x尚未达到各种平台(我们需要)和
  • 的标志
  • 正式宣布为

但是,是的,我们确实在需要时使用Boost(当然,只有在发布完成卫生阶段之后我们才会使用它),就像我们使用的任何其他第三方库一样。此外,我们会根据需要使用源表单。

然而,在产品设计阶段(例如移动转移器等),有更努力地采用更严格的驱动原则。

当C ++ 0x标准化时,肯定会有一些工作;但这也需要我们继续使用一些较新的编译器(vc10?),继续使用新的编译器总是一个任务

答案 4 :(得分:1)

您可能实际上总是喜欢使用Boost版本很长一段时间。特别是如果你需要在多个平台上编译。

Boost库在多个平台上移植和测试,并且在那里表现相同(大部分时间。)

新的C ++库的第一个供应商实现可能仍然包含小错误和性能差异,就像添加STL和std命名空间时一样混乱。