15

一连串的问题BOOST_FOREACH促使我询问 Boost 库的用户他们正在做什么(如果有的话)来准备他们的代码以移植到提议的新 C++ 标准(又名 C++0x)。例如,如果您使用以下代码,您是否会编写这样的代码shared_ptr

#ifdef CPPOX
#include <memory>
#else
#include "boost/shared_ptr.hpp"
#endif

还有命名空间问题——将来,shared_ptr将成为std命名空间的一部分——你如何处理这个问题?

我对这些问题很感兴趣,因为我决定硬着头皮开始认真学习 boost,并且我想在我的代码中使用最佳实践。

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

4

5 回答 5

14

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

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

(如果你想切换到标准的 shared_ptr,我会说在时机成熟时进行简单的搜索/替换可能更容易。替换#include <boost/shared_ptr.hpp>#include <memory>,boost::shared_ptrstd::shared_ptr

或者,当然,您可以决定要继续使用 Boost 的项目shared_ptr。毕竟,仅仅因为它已被添加到标准库并不意味着您必须使用它。

于 2009-04-04T11:21:17.340 回答
2

由于命名空间,什么都不需要做。如果您想使用 boost 实现,您仍将使用 boost 命名空间。

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

在这里查看我之前的类似问题:一旦 C++0x 成为主流,boost 的重叠部分会发生什么?

但当然,如果您在代码中大量使用命名空间,您可能会有一些重叠的定义。您必须在每次使用时重新明确指定命名空间。

于 2009-04-04T11:36:02.890 回答
2

在 C++0x 和 Boost 之间使用共享部分的最好方法是使用 Boost.TR1,即;如果技术报告已被接受,则执行。Boost.TR1 将在可用时使用编译器提供的实现,否则将使用 Boost 提供的实现。这是 Boost.TR1 的主要目标

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

于 2010-05-01T14:09:12.717 回答
1

不,到目前为止,鉴于以下事实,我们还没有:

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

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

然而,在产品设计阶段(例如 move-ctor 等)正在努力更严格地采用驱动原则。

当 C++0x 标准化时肯定会有一些工作;但这也将要求我们继续使用一些较新的编译器(vc10?),并且继续使用新的编译器始终是它自己的任务

于 2009-04-04T11:10:15.900 回答
1

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

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

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

于 2009-04-07T15:26:38.567 回答