質問のタイトルが適切かどうかわかりません。ここに問題があります。私はいくつかのc++11ライブラリ機能を使用するライブラリを書いています。明らかに、まだすべての実装がこれらのライブラリをサポートしているわけではないため、移植性の問題があります。ここでは、どのライブラリが問題になるかは関係ありません。1つの解決策は、すでに多くのc++11ライブラリを提供しているboostを使用することです。したがって、私の解決策は、たとえばマクロUSE_CXX11
を定義し、新しい名前空間sayを定義internal
して、マクロに依存するこの内部名前空間に名前を導入することです。たとえばfoo
、c++ライブラリの名前を使用する必要があるとします。<foo>
これは。でも使用できます<boost/foo/foo.hpp>
。私がしていることは
#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の実装が機能しているか、ブーストのみを使用できるかを示すことができます。そして、私のライブラリは正しいヘッダーと名前空間を取得します。これは今のところ機能します。私の意図をうまく説明できたと思います。
しかし、上記の解決策は私には非常に醜いようです。この種のことのためのより良い習慣はありますか?または、このアプローチが機能しない可能性のある状況はありますか?