我们有一些用 TR1 编写的代码,例如:
#include <tr1/functional>
...
typedef std::tr1::function<void(int)> MyFunction;
..
使用 GCC 编译可以正常工作,但使用 VS2010 失败。
我们的代码与 C++11 存在兼容性问题,所以恐怕我不能简单地切换到 C++11。我也不想在我们的代码中引入 boost。
我应该为 VS2010 下载任何包或其他内容以使其支持 TR1 吗?
我们有一些用 TR1 编写的代码,例如:
#include <tr1/functional>
...
typedef std::tr1::function<void(int)> MyFunction;
..
使用 GCC 编译可以正常工作,但使用 VS2010 失败。
我们的代码与 C++11 存在兼容性问题,所以恐怕我不能简单地切换到 C++11。我也不想在我们的代码中引入 boost。
我应该为 VS2010 下载任何包或其他内容以使其支持 TR1 吗?
您可以直接<functional>
在 VS 2010 中使用。所以它会
#include <functional>
...
typedef std::function<void(int)> MyFunction;
..
VS 2010 将之前的内容std::tr1
移到了通常的std
命名空间中,但 VS 2008 仍然使用std::tr1
. 也就是说tr1
,如果需要,您仍然应该能够显式使用命名空间,即
#include <functional>
...
typedef std::tr1::function<void(int)> MyFunction;
..
也是有效的(注意包含的头文件没有tr1/
)。
相关链接:
VS 2010 支持 TR1 开箱即用。当你包含它时,你不需要tr1/
在文件名的开头。
#include <functional>
typedef std::tr1::function<void(int)> MyFunction;
请注意,TR1 没有为标题指定文件名,因此只要符合 TR1,任何一个都与另一个大致相同。