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.


Anmelden zum Antworten