2010-08-28 18 views
5

¿es posible en C++ crear un alias de clase de plantilla (sin especificar parámetros)?Typedef (alias) de una clase genérica

typedef std::map myOwnMap; 

no funciona.

Y si no, ¿hay alguna buena razón?

+1

Creo que lo mejor que puedes hacer es 'using std :: map;' para importar 'map' en el espacio de nombres local. –

Respuesta

18

En C++ 98 y C++ 03 typedef solamente puede usarse en un tipo completo:

typedef std::map<int,int> IntToIntMap; 

Con C++ 0x hay una nueva brillante la sintaxis para reemplazar typedef:

using IntToIntMap = std::map<int,int>; 

que también apoya template aliasing:

template < 
    typename Key, 
    typename Value, 
    typename Comparator = std::less<Key>, 
    typename Allocator = std::allocator< std::pair<Key,Value> > 
> 
using myOwnMap = std::map<Key,Value,Comparator,Allocator>; 

Aquí tienes :)

6

Esta característica se introducirá en C++ 0x, llamado alias de plantilla. Se verá así:

template<typename Key, typename Value> 
using MyMap = std::map<Key, Value> 
13

Los deletreos de tipo de plantilla no son compatibles con el estándar C++ 03. Hay soluciones, sin embargo:

template<typename T> 
struct MyOwnMap { 
    typedef std::map<std::string, T> Type; 
}; 

MyOwnMap<int>::Type map; 
+0

Excelente respuesta basada en metaprogramación. +1 – paercebal

+0

Excepto que el nombre resultante probablemente no sea mucho más corto ... – UncleBens

+0

@Uncle: No dijo que era para fines de longitud, y su ejemplo toma el mismo número de teclas. –

Cuestiones relacionadas