我可以在VS2010中使用C++TR1吗

Can I use C++ TR1 in VS2010?

本文关键字:C++TR1 VS2010 我可以      更新时间:2023-10-16

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

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

它通过GCC编译可以很好地工作,但在VS2010中失败了。

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

有没有什么包或东西我应该下载VS2010,使其支持TR1?

您可以在VS 2010中直接使用<functional>。那就是

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

VS2010将以前在std::tr1中的内容移到了通常的std命名空间中,但VS2008仍然使用std::tr1。也就是说,如果您需要tr1命名空间,也就是,您应该仍然能够显式地使用它

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

也有效(请注意,包含的头文件没有tr1/)。

相关链接:

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

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

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

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

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