我不确定问题的标题是否正确。这是问题。我正在编写一个使用一些C++ 11库特性的库。显然不是所有的实现都支持这些库,因此存在可移植性问题。这里关心哪个库是无关紧要的。一种解决方案是使用boost,它已经提供了很多C++ 11库。所以我的解决方案是定义一个宏,如USE_CXX11
,并定义一个新的名称空间,如internal
,并根据宏将名称引入此内部名称空间。例如,我需要使用来自C++库<foo>
的名称foo
,该名称也可在<boost/foo/foo.hpp>
中获得。我所做的是boost/C++的C++封装器11
#ifdef USE_CXX11
#include <foo>
#else
#include <boost/foo/foo.hpp>
#endif
namespace internal {
#ifdef USE_CXX11
using std::foo;
#else
using boost::foo::foo;
#endif
}
而在图书馆的其余部分,我只使用internal::foo
。使用该库的第三方代码可以定义适当的宏来指示它们是否具有正常工作的C++ 11实现,或者它们只能使用boost。而我的图书馆将拾取正确的标题和名称空间。这工作到目前为止。希望我已经很好地解释了我的意图。
但上述解决方案对我来说似乎非常难看。这种事情有没有更好的做法?或者有什么可能的情况下,这种方法将无法正常工作?
退房** ** Boost.TR1如果 –
它在加速,你需要支持过时的编译器,直接使用Boost中的那个。 –
为什么不直接使用boost? – fbafelipe