不同的编译器似乎对TR1有不同的看法。 G ++似乎只接受包含类型:
#include <tr1/unordered_map>
#include <tr1/memory>
...
虽然微软编译器只接受:
#include <unordered_map>
#include <memory>
...
至于我理解TR1,微软的方式是正确的。
有没有办法让G ++接受第二个版本? 一般来说,如何以便携方式处理TR1?
答案 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)