我不確定問題的標題是否正確。這是問題。我正在編寫一個使用一些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