0

我们有一些用 TR1 编写的代码,例如:

#include <tr1/functional>
...
typedef std::tr1::function<void(int)> MyFunction;
..

使用 GCC 编译可以正常工作,但使用 VS2010 失败。

我们的代码与 C++11 存在兼容性问题,所以恐怕我不能简单地切换到 C++11。我也不想在我们的代码中引入 boost。

我应该为 VS2010 下载任何包或其他内容以使其支持 TR1 吗?

4

2 回答 2

4

您可以直接<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/)。

相关链接:

std、tr1 和 boost(作为命名空间和/或库)之间有什么区别?

为什么VS2010维护std::tr1命名空间?

于 2013-07-19T02:44:12.030 回答
3

VS 2010 支持 TR1 开箱即用。当你包含它时,你不需要tr1/在文件名的开头。

#include <functional>

typedef std::tr1::function<void(int)> MyFunction;

请注意,TR1 没有为标题指定文件名,因此只要符合 TR1,任何一个都与另一个大致相同。

于 2013-07-19T02:42:16.343 回答