template c++ templates c++11 typedef tr1

c++ - template - Typedef una clase de plantilla sin especificar los parámetros de la plantilla



template en c++ (2)

Estoy tratando de escribir un mapa unordered_map o std :: map dependiendo de si hay bibliotecas TR1 disponibles. Pero no quiero especificar los parámetros de la plantilla. Por lo que he leído hasta ahora, no es posible escribir plantillas sin argumentos hasta que esté disponible el estándar oficial de c ++ 0x. Entonces, ¿alguien sabe una solución elegante para esto?

#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


La forma en que he visto esto hecho es envolver typedef en una estructura de plantilla:

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 };

Luego en tu código lo invocas así:

myMap<key, value>::type myMapInstance;

Puede que sea un poco más detallado de lo que desea, pero creo que satisface la necesidad dado el estado actual de C ++.


Tienes que usar tipos completos para typedefs.

Utilice una macro #define en su lugar.