我们有一些用TR1编写的代码,例如:
#include <tr1/functional>
...
typedef std::tr1::function<void(int)> MyFunction;
..
通过GCC编译可以正常工作,但VS2010失败了。
我们的代码有compatibility issue with C++11所以我担心我不能简单地切换到C ++ 11。我不想在我们的代码中引入boost。
我是否应该为VS2010下载任何包或其他内容以使其支持TR1?
答案 0 :(得分:4)
您可以在VS 2010中直接使用<functional>
。所以它就是
#include <functional>
...
typedef std::function<void(int)> MyFunction;
..
VS 2010将先前std::tr1
中的内容移动到通常的std
命名空间中,但VS 2008仍使用std::tr1
。也就是说,如果需要,您仍然可以明确地使用tr1
命名空间I.e。
#include <functional>
...
typedef std::tr1::function<void(int)> MyFunction;
..
也有效(注意包含的头文件没有tr1/
)。
相关链接:
What are differences between std, tr1 and boost (as namespaces and/or libraries)?
答案 1 :(得分:3)
VS 2010支持开箱即用的TR1。当你包含它时,你不需要在文件名的开头加tr1/
。
#include <functional>
typedef std::tr1::function<void(int)> MyFunction;
请注意,TR1没有为标题指定文件名,因此只要符合TR1,任何一个都与另一个大致相同。