不同的编译器对TR1似乎有不同的看法。G++只接受以下类型的包含:
#include <tr1/unordered_map>
#include <tr1/memory>
...
虽然Microsoft的编译器只接受:
#include <unordered_map>
#include <memory>
...
据我了解TR1,微软的方法是正确的。
有没有办法让G++接受第二个版本?一般来说如何以可移植的方式处理TR1?
不同的编译器对TR1似乎有不同的看法。G++只接受以下类型的包含:
#include <tr1/unordered_map>
#include <tr1/memory>
...
虽然Microsoft的编译器只接受:
#include <unordered_map>
#include <memory>
...
据我了解TR1,微软的方法是正确的。
有没有办法让G++接受第二个版本?一般来说如何以可移植的方式处理TR1?
在您的机器上安装Boost。
将以下目录添加到您的搜索路径。
<Boost Install Directory>/boost/tr1/tr1
有关详细信息,请参见此处的boost tr1。
现在,当您包含<memory>时,您将获得具有std::tr1::shared_ptr的tr1版本的memory,然后它会包含平台特定版本的<memory>以获取所有常规好处。
#include "boost/tr1/unordered_map.hpp"
,如果可用的话,它将使用 tr1 实现。 - Mohamed Bana#ifdef _WIN32
#include <unordered_map>
#include <memory>
#else
#include <tr1/unordered_map>
#include <trl/memory>
#endif
_WIN64
是真实存在的)来进行条件编译,例如:#if defined( _MSC_VER ) && ( _MSC_VER > 1300 )
。 - IInspectablenamespace std { namespace tr1 { using namespace std; } }
我曾经有同样的疑问。不幸的是,技术报告没有说明如何包含头文件。它仅定义了扩展应位于::std::tr1命名空间中。
#include <memory>
就可以使用了。