テンプレートパラメータを指定せずにテンプレートクラスをtypedefする 質問する

テンプレートパラメータを指定せずにテンプレートクラスをtypedefする 質問する

TR1 ライブラリが利用可能かどうかに応じて、unordered_map または std::map のいずれかを typedef しようとしています。ただし、テンプレート パラメータは指定したくありません。これまでに読んだところによると、引数なしでテンプレートを typedef することは、公式の c++0x 標準が利用可能になるまでは不可能だそうです。では、これに対するエレガントな回避策を知っている人はいますか?

#ifdef _TR1
#include <unordered_map> 
typedef std::tr1::unordered_map MyMap; //error C2976: too few template arguments
#else
#include <map> 
typedef std::map MyMap; //error C2976: too few template arguments
#endif

ベストアンサー1

私が見た方法は、typedef をテンプレート構造体でラップすることです。

template<typename KeyType, typename MappedType>
struct myMap
{
#ifdef _TR1
    typedef std::tr1::unordered_map<KeyType, MappedType> type;
#else
    typedef std::map<KeyType, MappedType> type;
#endif
};

次に、コード内で次のように呼び出します。

myMap<key, value>::type myMapInstance;

必要な内容より少し冗長かもしれませんが、C++ の現状を考えると、ニーズを満たしていると思います。

おすすめ記事