2010-08-28 4 views
5

est-il possible en C++ de créer un alias de classe template (sans spécifier de paramètres)?Typedef (alias) d'une classe générique

typedef std::map myOwnMap; 

ne fonctionne pas.

Et si non, y at-il une bonne raison?

+1

Je pense que le mieux que vous pouvez faire est d'utiliser 'std :: map;' pour importer 'map' dans l'espace de noms local. –

Répondre

18

En C++ 98 et 03 typedef C++ ne peuvent être utilisés sur un type complet:

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

Avec C++ 0x il y a un nouveau brillant syntaxe pour remplacer typedef:

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

qui supporte également template aliasing:

6

Cette fonctionnalité sera introduite en C++ 0x, appelée alias de modèle. Il ressemblera à ceci:

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

Les typedesfs de modèle ne sont pas pris en charge dans la norme C++ 03. Il y a des solutions de contournement, cependant:

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

MyOwnMap<int>::Type map; 
+0

Excellente réponse basée sur le métaprogrammation. +1 – paercebal

+0

Excepté le nom qui en résultera ne sera probablement pas beaucoup plus court ... – UncleBens

+0

@Uncle: Il n'a pas dit que c'était pour des raisons de longueur, et son exemple prend le même nombre de frappes. –

Questions connexes