Anfänger: std:map / Template
-
Hi Leute!
Ok, mal wieder was nicht kapiert...
Ich möchte, wie auf [1] beschrieben, einen, über Strings, assoziativen Arraytyp:typedef std::map<std::string, int, std::less<std::string> > Assoc_array; Assoc_array array1; array1["haus"] = 14;
... das funktioniert, aber wenn ich mit einem Template das Array vom belibigem Typ sein lassen möchte:
template <class T> // bzw. <typename T> typedef std::map<std::string, T, std::less<std::string> > Assoc_array; Assoc_array<int> array1; Assoc_array<bool> array2; array1["haus"] = 14; array2["haus"] = true;
... geht's net! Was mach ich denn falsch? Hab ich da mit den Templates was falsch verstanden??
Grüße, L.
[1] http://www.parashift.com/c++-faq-lite/containers-and-templates.html#faq-34.2
-
template <class T> // bzw. <typename T> typedef std::map<std::string, T, std::less<std::string> > Assoc_array;
das ist kein korrektes C++, template typedefs gibt es (noch) nicht. Den gleichen Effekt kann man aber mit Hilfe eines anderen Templates erreichen:
template<class T> struct Assoc_array { typedef std::map<std::string,T> containter_type; }; Assoc_array<int>::containter_type a1; Assoc_array<double>::containter_type a2; Assoc_array<char>::containter_type a3;
-
Ok, da hätte ich [1] wohl besser duchlesen sollen. Dann währ ich sofort zu der Lösung gekommen [2]. Ich danke dir!
Weist du vielleicht wann / ob überhaupt der Standard erweitert wird? Nicht dass ich jetzt solange darauf warte, interessiert mich halt.Grüße, L.
[1] http://www.cuj.com/documents/s=7976/cujcexp2012sutter/
[2] http://www.gotw.ca/gotw/079.htm
-
Sicher wird es erweitert. Template typedefs, nullptr gehören zu den vorgeschlagenen Features, die höchstwahrscheinlich im nächsten Standard enthalten sein werden.