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 ersatzFü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).