我想使用现代版本的 GCC 和 MSVC 附带的 TR1 库,但存在细微差别:在 GCC 中,我不得不说
#include <tr1/memory>
std::tr1::shared_ptr<int> X;
在 MSVC 中我不得不说
#include <memory>
std::shared_ptr<int> X;
我有两个问题:1)MSVC是自动运行在C++0x模式(相当于GCC的std=c++0x),还是默认也运行在C++98/03模式? 2)如何统一包含和命名空间?我在考虑“INCLUDE_TR1(内存)”或类似的预处理器宏。
澄清一下,我想使用传统的标准 C++98/03; 不是 C++0x(否则没有问题)。
如果有任何建议,我将不胜感激!
最佳答案
- VC++ 2010 仅在C++0x模式下运行;以前的版本没有 C++0x 支持。也就是说,VC++ 2010 中的许多标准库仍然基于 TR1(例如
std::result_of<>
使用 TR1 result_of 协议(protocol)而不是基于decltype
);事实上,VC++ 2010 中的许多标准库实际上并未在命名空间std
中定义。 ,而是在命名空间std::tr1
中并拉入命名空间std
使用 using 指令。 - 使用Boost . TR1 -- 它会
#include
根据您的平台选择适当的 header ,或者如果您的平台不支持 TR1,#include
相应的 Boost 实现并将它们拉入命名空间std::tr1
使用声明。
关于c++ - 在 GCC 和 MSVC 中使用 TR1 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952602/