質問のタイトルが適切かどうかわかりません。ここに問題があります。私はいくつかのC + + 11ライブラリ機能を使用するライブラリを書いています。すべての実装がまだこれらのライブラリをサポートしていないことは明らかです。したがって、移植性の問題があります。どのライブラリがここで問題になるかは問題ではありません。 1つの解決策は、既に多くのC++ 11ライブラリを提供するboostを使うことです。だから私の解決策は、マクロを定義することです。たとえば、USE_CXX11
と、新しい名前空間を定義してinternal
と定義し、この内部名前空間にマクロに依存する名前を導入します。たとえば、foo
という名前のC++ライブラリ<foo>
を使用する必要があります。これは<boost/foo/foo.hpp>
でも利用できます。私は何をしてブースト/ 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.Algorithmsライブラリで(今後の1.50リリースの新機能)** Boost.TR1 ** –
それはブースト中だし、あなたがサポートする必要がある場合時代遅れのコンパイラは、Boostのものをそのまま使ってください。 –
ブーストを使用してみませんか? – fbafelipe