不同的编译器似乎对TR1有不同的想法。G++似乎只接受以下类型的包含:
#include <tr1/unordered_map>
#include <tr1/memory>
...而Microsofts编译器只接受:
#include <unordered_map>
#include <memory>
...就我对TR1的理解而言,微软的方式是正确的。
有没有办法让G++接受第二个版本?一般情况下,如何以可移植的方式处理TR1?
发布于 2009-08-04 17:35:36
在您的计算机上安装boost。
将以下目录添加到搜索路径中。
/boost/tr1/tr1
有关详细信息,请参阅此处boost tr1
现在,当您包含时,您将获得具有std::tr1::shared_ptr的tr1版本的内存,然后它将包含的特定于平台的版本,以获取所有常规功能。
发布于 2010-07-16 04:20:13
#ifdef _WIN32
#include <unordered_map>
#include <memory>
#else
#include <tr1/unordered_map>
#include <trl/memory>
#endif发布于 2009-08-04 16:08:18
也许目前最好的方法是简单地使用boost库,因为在许多情况下,它们有类似于TR1特性的接口的替代品,只是位于不同的(但一致的)头路径和名称空间中。这样做的好处是可以在甚至还没有开始实现C++0x的编译器上工作。而且有很多有用的boost库根本不在TR1中:)
或者,在G++上,您可以尝试在命令行上传递--std=gnu++0x。这至少适用于和。然后使其在std::tr1中可用:
namespace std { namespace tr1 { using namespace std; } }这自然是邪恶的。我强烈建议使用boost方法:)
https://stackoverflow.com/questions/1228402
复制相似问题