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


Log in to reply