2010-08-28 47 views
5

è possibile in C++ creare un alias della classe template (senza specificare i parametri)?Typedef (alias) di una classe generica

typedef std::map myOwnMap; 

non funziona.

E se no, c'è qualche buona ragione?

+1

Penso che il meglio che puoi fare sia usare "std :: map;" per importare 'map' nello spazio dei nomi locale. –

risposta

18

In C++ 98 e C++ 03 typedef può essere utilizzato solo su un tipo completo:

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

Con C++ 0x c'è un nuovo lucido sintassi per sostituire typedef:

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

che supporta anche 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>; 

Qui vai :)

6

Questa funzione verrà introdotta in C++ 0x, chiamato alias del modello. Sembrerà così:

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

I typedef di modello non sono supportati nello standard C++ 03. Ci sono soluzioni alternative, comunque:

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

MyOwnMap<int>::Type map; 
+0

Eccellente risposta basata su metaprogrammazione. +1 – paercebal

+0

Tranne il nome risultante molto probabilmente non sarà molto più breve ... – UncleBens

+0

@Uncle: Non ha detto che era per scopi di lunghezza, e il suo esempio prende lo stesso numero di sequenze di tasti. –

Problemi correlati