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 MeineKlasse
    

    und wenn man dann

    MeineKlasse<2> meinObjekt;
    

    schreibt, bekommt die Membervariable den Typ

    map<string, map<string, map<string, string> > >
    

    Wie kann ich das realisieren?


  • Mod

    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.


Anmelden zum Antworten