Template in Typ-Liste suchen
-
Grüße!
Gibt es eine Möglichkeit, "generisch" eine Template-Klasse in einer Typ-Liste zu suchen? Da ich es mit den Bezeichnungen für die Dinge nicht so habe, als Beispiel:template< typename T, int foo > struct Foo1 {}; template< typename T, typename S > struct Foo2 {}; using List = list<Foo1<float,5>, Foo2<int, int>>; using type = find< List, Foo1 >;
Also dass "find" sozusagen irgendein Template als Parameter erhalten kann, nicht eines mit bestimmten Parametern.
Also Provisorium habe ich dieses ausprobiert:
template< typename... T > struct value_template { template < template< T... > typename Template > struct finder { template< typename Elem > struct apply { using type = void_type; static constexpr bool value = false; }; template<T... Values> struct apply< Template< Values... > > { using type = Template< Values... >; static constexpr bool value = true; }; }; };
Auch wenn das schon nicht so ganz ist, was ich haben will, kompiliert es nicht:
template< int a, int b > struct some_template {}; using type = value_template<int, int>::finder< some_template >; // error C3201: the template parameter list for class template 'some_template' // does not match the template parameter list for template parameter 'Template'
-
Siehe hier: http://stackoverflow.com/questions/17390605/doing-a-static-assert-that-a-template-type-is-another-template
Damit kann man das find<List, Foo1> eigentlich einfach runterprogrammieren. Geht aber leider nicht mit nontype Templateparametern (wie bei Foo1).