26

利用可能なTR1ライブラリがあるかどうかに応じて、unordered_mapまたはstd::mapのいずれかを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
4

2 に答える 2

38

私がこれを行ったのを見た方法は、typedefをtemplate-structでラップすることです。

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++の現在の状態を考えるとそれはニーズを満たしていると私は信じています。

于 2009-09-24T22:12:10.030 に答える
4

typedef には完全な型を使用する必要があります。

代わりに #define マクロを使用してください。

于 2009-09-24T22:11:51.630 に答える