コンパイラによって、TR1についての考え方が異なるようです。 G ++は次のタイプのインクルードのみを受け入れるようです:
#include <tr1/unordered_map>
#include <tr1/memory>
...
Microsoftsコンパイラは次のもののみを受け入れます。
#include <unordered_map>
#include <memory>
...
私がTR1を理解しているように、マイクロソフトの方法が正しい方法です。
G ++で2番目のバージョンを受け入れる方法はありますか?一般に、どのようにしてポータブルな方法でTR1を処理しますか?
マシンにboostをインストールします。
次のディレクトリを検索パスに追加します。
<Boostインストールディレクトリ>/boost/tr1/tr1
詳細はこちら boost tr1
ここで、<memory>を含めると、std :: tr1 :: shared_ptrを持つtr1バージョンのメモリが取得され、次に、プラットフォーム固有のバージョンの<memory>が含まれて、すべての通常のメリットが得られます。
#ifdef _WIN32
#include <unordered_map>
#include <memory>
#else
#include <tr1/unordered_map>
#include <trl/memory>
#endif
おそらく最良の方法は、現時点では単に boost ライブラリーを使用することです。多くの場合、それらにはTR1機能と同様のインターフェースを持つ代替があり、異なる(ただし一貫した)ヘッダーパスと名前空間にあるだけです。 。これには、C++ 0xの実装が始まっていないコンパイラでも作業できるという利点があります。そして、TR1にはまったくない便利なboostライブラリがたくさんあります:)
あるいは、G ++では、コマンドラインで--std = gnu ++ 0xを渡してみることができます。これは、少なくとも<unordered_set>と<unordered_map>で機能します。次に、それをstd :: tr1で使用できるようにします。
namespace std { namespace tr1 { using namespace std; } }
これは当然のことながら悪です。代わりにブーストアプローチを強くお勧めします:)
ちょっとおかしいかもしれませんが、コンパイラのtr1ディレクトリをインクルードパスに追加するだけです。
私も同じ質問をしました。残念ながら、テクニカルレポートには、ヘッダーをどのように含める必要があるかは記載されていません。これは、拡張機能が:: std :: tr1名前空間にあることを定義するだけです。
Windowsの場合は、「tr1」ディレクトリをシステムパスに追加します。次に#include <memory>
は動作するはずです。