Подтвердить что ты не робот

Typedef класс шаблона без указания параметров шаблона

Я пытаюсь ввести unordered_map или std:: map в зависимости от наличия доступных библиотек TR1. Но я не хочу указывать параметры шаблона. Из того, что я читал до сих пор, typedef'ing шаблоны без аргументов невозможно до тех пор, пока не будет доступен официальный стандарт С++ 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
4b9b3361

Ответ 1

То, как я это делал, - это обернуть typedef в шаблон-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;

Это может быть немного более подробным, чем то, что вы хотите, но я считаю, что он отвечает потребностям, данным текущему состоянию С++.

Ответ 2

Вы должны использовать полные типы для typedefs.

Вместо этого используйте макроС#define.