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
Ответы
Ответ 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.