Verschachtelungstiefe einer Map dynamisch festlegen
-
Ich hätte da folgendes Problem: Ich hab eine Klasse mit einer Membervariable, die eine verschachtelte Map darstellt:
class MeineKlasse { //... private: map<string, map<string, string> > meineVariable; };Ich hätte es jetzt gern so umgeschrieben, daß ich die Verschachtelungstiefe der Map beim Erstellen des Objekts festlegen kann. Daß ich von MeineKlasse also Objekte anlegen kann, bei denen meineVariable vom Typ
map<string, string>oder vom Typ
map<string, map<string, string> >oder vom Typ
map<string, map<string, map<string, string> > >oder vom Typ
map<string, map<string, map<string, map<string, string> > > >etc. ist.
Vielleicht könnte man das so machen, daß ich die Klasse folgendermaßen deklariere:
template<int verschachtelungstiefe> class MeineKlasseund wenn man dann
MeineKlasse<2> meinObjekt;schreibt, bekommt die Membervariable den Typ
map<string, map<string, map<string, string> > >Wie kann ich das realisieren?
-
template<int N> struct MyMap { typedef map< string, typename MyMap< N - 1 >::type > type; }; template<> struct MyMap< 0 > { typedef map< string, string > type; }; MyMap< 2 >::type myObject;
-
camper schrieb:
template<int N> struct MyMap { typedef map< string, typename MyMap< N - 1 >::type > type; }; template<> struct MyMap< 0 > { typedef map< string, string > type; }; MyMap< 2 >::type myObject;

cooooles Teil !!
Es ist doch etwas anderes, ob man prinzipiell weiß, dass sowas geht ... oder ob man es denn dann in seiner ganzen Eleganz sieht.
C++ ist schon eine geile Sprache ! (
ganz subjektiver und ungefilterter Gefühlsausdruck)Gruß,
Simon2.