在 C++0x、C++03 TR1 和 boost 之间,可以根据编译器在 3 个不同的地方定义函数和绑定之类的东西,例如,对于 VC pre VC9 功能包,你有 boost 版本,然后你把它们放进去,但是在 std::tr1:: 命名空间中,VC10 将其移动到 std:: 命名空间。
目前我现有的代码在 boost:: 命名空间中使用旧的 boost 版本,但是因为对于我的许多应用程序和库,我使用的所有 boost 东西现在都在 tr1 和 C++0x 中,如果可能的话,id 就像删除 boost 依赖从那些,同时保持与旧编译器版本的向后兼容性。
但是我不确定如何让我的代码定位、包含然后能够访问正确的版本:(我考虑过的一件事是使用像 _MSC_VER 这样的宏来查看编译器是否包含我想要的类,(回退到 tr1,然后根据需要进行提升),然后使用“using somenamespace::someclass;”东西将有问题的类移动到 std:: 命名空间中。
问题是似乎在某些情况下这可能会破坏一些东西,我什至不确定如何判断 VC9 是否安装了它的功能包或 SP1 :( ,也许提供我自己的功能性.hpp 来实现所需的“魔法”?
主要的是我想开始为新标准编写代码,但在某种程度上它仍然可以在旧编译器上以最小的努力工作。