来自Boost或VC10的TR1 - 哪一个更好?

时间:2010-08-17 20:42:09

标签: c++ visual-studio-2010 boost tr1

我目前正在从Visual Studio 2008迁移到2010.我的软件大量使用Boost及其TR1功能。我现在得到了很多编译器错误,因为VC10有自己的TR1实现。

我知道我可以使用_HAS_CPP0X开关禁用Microsoft的TR1实现(请参阅here),但我不确定这是否也会禁用将来可能感兴趣的其他功能。

所以,我想知道哪个是更好的TR1实现:来自Boost的那个还是来自Microsoft的那个?有任何差异吗?禁用Microsoft实现有任何缺点吗?

2 个答案:

答案 0 :(得分:1)

如果您的代码无法使用VC10的标准库进行编译,那么这可能表明它不符合标准。 VC10中的标准库来自Dinkumware,这些人在实现标准库时并不坏。 (PJP曾经是lib工作组的主席。)在将每个问题视为特定于VC的问题之前,我会仔细研究每个问题,以免你可能与以后不兼容。

另外,TTBOMK,VC10不只是附带TR1,而是使用C ++ 1x(例如,std::shared_ptr而不是std::tr1::shared_ptr; ICBWT),所以boost和VC10的库实际上不是完全可比。

答案 1 :(得分:0)

第一个:
您应该能够并排使用Boost和TR1。如果一切都配置正确并且您没有弄乱using namespace,则不会出现任何错误。

C ++ 11 提供类似auto关键字(more info)的功能,或者在声明(more info)Boost可以执行的类属性初始化提供。

另一方面, Boost 提供的不仅仅是他们对C ++ 11功能的实现。本质上,Boost是一组库,它们被认为是添加到C ++标准中的。

当谈到两者都提供的功能(如shared_ptr)时,我建议使用Boost:

  • 使用不支持某些C ++ 11功能的编译器进行Boost编译
  • 你有一个明确的依赖,而不是仅仅转发C ++ 11(大多数编译器实现不同)
  • Boost数据类型(例如shared_ptr)与其他Boost功能兼容,例如serialization

我的建议就是在你绝对需要的时候使用C ++ 11,在所有其他情况下使用Boost。