c++ - 在 GCC 和 MSVC 中使用 TR1 库

标签 c++ visual-c++ gcc tr1

我想使用现代版本的 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(否则没有问题)。

如果有任何建议,我将不胜感激!

最佳答案

  1. VC++ 2010 在C++0x模式下运行;以前的版本没有 C++0x 支持。也就是说,VC++ 2010 中的许多标准库仍然基于 TR1(例如 std::result_of<> 使用 TR1 result_of 协议(protocol)而不是基于 decltype);事实上,VC++ 2010 中的许多标准库实际上并未在命名空间 std 中定义。 ,而是在命名空间 std::tr1 中并拉入命名空间 std使用 using 指令。
  2. 使用Boost . TR1 -- 它会 #include根据您的平台选择适当的 header ,或者如果您的平台不支持 TR1,#include相应的 Boost 实现并将它们拉入命名空间 std::tr1使用声明。

关于c++ - 在 GCC 和 MSVC 中使用 TR1 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952602/

相关文章:

c++ - 如何检测windows 8.1开始菜单?

c++ - 使用 cmake 和 travis boost 1.67 静态库

c++ - 将简单的 MFC CView/CDocument/CSingleDocTemplate 应用程序转换为 ActiveX 控件

linux - 代码注入(inject) - Solaris 和 Linux

比较无符号与有符号不会发出警告(使用 const)

c++ - 从 DLL 导出 STL std::basic_string 模板时,出现 LNK2005 错误

c++ - 如何在 Visual Studio IDE (2008) 中打开多 CPU/Core C++ 编译?

visual-c++ - CMake:从定义文件生成导入库

c++ - 代码使用 g++ 编译但使用 VC++ 10 失败

c - 无法在 vscode 中调试单个 .c 文件