Template-Templates
-
Hi!
Ich bekomme es gerade nicht hin, wie kann man so etwas lösen?:
template<typename T> class A { }; template<typename T> class B { }; template<typename T, typename F<T> > class X { }; X< char, A<char> > x;Ich will also erzwingen, dass der Templateparameter F zu der Klasse X selbst eine Templateklasse ist, die auch den Parameter T hat.
-
willst du einen template-template parameter und den selbst mit dem ersten template-argument spezialisieren (1), oder willst du eine spezialisierung für dein template darauf, dass das zweite argument mit dem ersten parametrisiert sein muss (2)?
//(1) template <class T, template <class> class U> struct Foo { typedef U<T> AutoU; }; //(2) template <class T, class U> struct Bar; //Spezialisierung template <class T, template <class> class U> struct Bar<T, U<T> > { };
-
Badestrand schrieb:
Hi!
Ich bekomme es gerade nicht hin, wie kann man so etwas lösen?:
template<typename T> class A { }; template<typename T> class B { }; template<typename T, typename F<T> > class X { }; X< char, A<char> > x;Ich will also erzwingen, dass der Templateparameter F zu der Klasse X selbst eine Templateklasse ist, die auch den Parameter T hat.
Durch partielle Spezialisierung:
template<typename T> class A; template<typename T, typename U > class X; // bleibt undefiniert template<typename T, template<typename> class TT> class X< T, TT< T > > { ... }; // oder besser in Hinblick auf eine brauchbare Fehlermeldung: template<typename T, typename U > class Y { BOOST_STATIC_ASSERT(( is_template_class_with_1_type_parameter< U, T > )); ... }; // mit Hilfstemplate nach obigem Schema: template<typename, typename> struct is_template_class_with_1_type_parameter { static const bool value = false; }; template<typename T, template<typename> class TT> struct is_template_class_with_1_type_parameter< TT< T >, T > { static const bool value = true; };
-
Juchu, danke euch! Genau, ich suchte die partielle Spezialisierung, hatte aber gedacht, dass man das direkt irgendwie angeben kann, keine Ahnung... Ich glaube, ich setze aber doch queer_boys (1)-Methode ein
