2010-08-28 23 views
5

ist es in C++ möglich, einen Alias ​​der Template-Klasse zu erstellen (ohne Parameter anzugeben)?Typedef (Alias) einer generischen Klasse

typedef std::map myOwnMap; 

funktioniert nicht.

Und wenn nicht, gibt es einen guten Grund?

+1

Ich denke, das Beste, was Sie tun können, ist 'mit std :: map;' zu importieren 'map' in den lokalen Namespace. –

Antwort

18

In C++ 98 und C++ 03 typedef nur während eines vollständigen verwendet werden können:

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

Mit C++ 0x ein neues glänzend Syntax typedef zu ersetzen:

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

die auch template Aliasing unterstützt:

Hier gehts :)

6

Diese Funktion wird in C++ 0x, dem Vorlagenalias, eingeführt. Es wird wie folgt aussehen:

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

Vorlage Typedefs werden nicht in der C++ 03-Standard unterstützt. Es gibt Workarounds, aber:

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

MyOwnMap<int>::Type map; 
+0

Ausgezeichnete Metaprogramm-basierte Antwort. +1 – paercebal

+0

Außer dem resultierenden Namen wird höchstwahrscheinlich nicht viel kürzer sein ... – UncleBens

+0

@Uncle: Er sagte nicht, dass es für Zwecke der Länge war, und sein Beispiel nimmt die gleiche Anzahl von Tastenanschlägen. –

Verwandte Themen