C++0x、C++03 TR1 とブーストの間で、関数やバインドなどのいくつかのものは、コンパイラに応じて 3 つの異なる場所で定義できます。 std::tr1:: 名前空間で、VC10 はそれを std:: 名前空間だけに移動します。
現在、私の既存のコードは、boost:: 名前空間で古いバージョンのブーストを排他的に使用していますが、私のアプリケーションとライブラリの多くで、使用したすべてのブーストは現在 tr1 と C++0x にあるため、可能であればブーストの依存関係を削除したいと考えています古いバージョンのコンパイラとの下位互換性を維持しながら、それらから。
ただし、コードを見つけてインクルードし、正しいバージョンにアクセスできるようにする方法がわかりません:(私が検討したことの1つは、_MSC_VERのようなマクロを使用して、必要なクラスがコンパイラに含まれているかどうかを確認することです(フォールバックtr1 に移動し、必要に応じてブーストする)、「using somenamespace::someclass;」を使用して、問題のクラスを std:: 名前空間に移動します。
問題は、場合によってはこれが壊れる可能性があることです.VC9に機能パックまたはSP1がインストールされているかどうかを確認する方法さえわかりません:(それを行うためのきちんとした方法についてもわかりません、おそらく必要な「魔法」を行う独自のfunctional.hppを提供しますか?
主なことは、新しい標準用のコードを書き始めたいということですが、古いコンパイラでも最小限の労力で動作するようにします。