如何包含TR1?

时间:2009-08-04 16:05:28

标签: c++ include c++11 portability tr1

不同的编译器似乎对TR1有不同的看法。 G ++似乎只接受包含类型:

#include <tr1/unordered_map>
#include <tr1/memory>
...

虽然微软编译器只接受:

#include <unordered_map>
#include <memory>
...

至于我理解TR1,微软的方式是正确的。

有没有办法让G ++接受第二个版本? 一般来说,如何以便携方式处理TR1?

6 个答案:

答案 0 :(得分:16)

在您的机器上安装增强功能 将以下目录添加到搜索路径中。

&lt; Boost安装目录&gt; / boost / tr1 / tr1

请点击此处boost tr1了解详情

现在,当你包含&lt; memory&gt;你得到了具有std :: tr1 :: shared_ptr的内存的tr1版本,然后它包含平台特定版本的&lt; memory&gt;得到所有正常的好东西。

答案 1 :(得分:13)

#ifdef _WIN32
    #include <unordered_map>
    #include <memory>
#else
    #include <tr1/unordered_map>
    #include <trl/memory>
#endif

答案 2 :(得分:4)

也许最好的方法是现在简单地使用boost库,因为在许多情况下,它们具有与TR1功能类似的接口的替代方案,并且只是在不同的(但是一致的)头路径和名称空间中。这样做的好处是可以使用甚至开始实现C ++ 0x的编译器。并且有很多有用的升级库根本不在TR1中:)

或者,在G ++上,您可以尝试在命令行上传递--std = gnu ++ 0x。这适用于&lt; unordered_set&gt;和&lt; unordered_map&gt;,至少。然后使它在std :: tr1中可用:

namespace std { namespace tr1 { using namespace std; } }

这自然是邪恶的。我强烈推荐使用boost方法:)

答案 3 :(得分:3)

或许有点hacky,但你可以简单地将编译器tr1目录添加到你的包含路径。

答案 4 :(得分:2)

如果在Windows下,请将“tr1”目录添加到系统路径中。然后#include <memory>应该有用。

答案 5 :(得分:2)

我问自己同样的问题。不幸的是,技术报告没有说明如何包含标题。它只定义了扩展名应该在:: std :: tr1名称空间中。