typedef für template?



  • Hi,

    ich möchte ein typedef auf eine unbestimmte Templateklasse machen. Gibt es da nicht was tolles von boost, was mir dabei hilft?

    Danke

    tempalte<class> Test
    {
    };
    
    //mpl::_1 geht nicht :(
    typedef Test<mpl::_1> Test_t;
    


  • typedefs kann man nur auf eine explizit angegebene Klasse machen. "template typedefs" direkt sind nicht machbar, nur ueber einen Umweg, Bsp:

    //so gehts nicht:
    template<class T>
      typedef std::map<int, T> Map_t;
    template<class T>
      typedef std::map<int, T>::iterator Iter_t;
    
    Map_t<double> mymap;
    
    // aber so gehts:
    template <class T> 
    struct TT { //"TemplateTypedef"
      typedef std::map<int, T> Map_t;
      typedef std::map<int, T>::iterator Iter_t;
    }
    
    TT<double>::Map_t mymap;
    

    PS: ich nehme mal stark an, dass in deinem Code "tempalte" richtig geschrieben wurde und vor dem "Test" ein "class" oder "struct" steht 😉
    PPS: "mpl::_1 geht nicht" ist keine besonders aussagekraeftige Fehlermeldung. Sag uns lieber was dein Compiler dazu meint und was du damit eigentlich erreichen wolltest 😉

    /edit: http://www.gotw.ca/gotw/079.htm beschaeftigt sich genau mit dem Thema (grade drueber gestolpert)



  • Andere Möglichkeit ist auch oft ableiten:

    // template <class T> typedef foo<T> bar; // geht ja leider nicht...
    template <class T> struct bar : foo<T> {}; // oft ausreichender ersatz
    

    Für Meta-Programmierung reicht das normalerweise aus, solange man keinen ctor braucht (was bei Meta-Programmierung oft der Fall ist).

    Wenn man den "template typedef" braucht um irgendwo echte Objekte zu instanzieren ist das natürlich doof, hier bietet sich eher die "type-meta-function" an (was pumuckl schon beschreiben hat).


Anmelden zum Antworten