template template parameter Frage



  • Folgender Fall:

    template < template < class > class policy > class foo: public policy < some_traits < ..... > >
    {
    };
    
    template < class traits > class simple_policy {}; // OK
    template < class traits, unsigned int extra_value > class extra_policy {}; // Problem
    

    Ich will in der Lage sein, das zu erreichen:

    foo < simple_policy > foo1;
    foo < extra_policy < 5 > > foo2;
    

    Bis dato ist mir keine direkte Lösung eingefallen, nur das:

    template < unsigned int extra_value > struct extra_policy { template < class traits > class type { ... }; };
    foo < extra_policy < 5 > ::type > foo2;
    

    Hat jemand einen besseren Vorschlag?


  • Administrator

    Wie wäre es damit:

    template<typename TPolicy>
    class foo /* : ... */ {
    
        // ...
    };
    
    class simple_policy() { /* ... */ };
    
    template<unsigned int extra_value>
    class extra_policy {
    
        // ...
    }
    
    // Dann kannst du das machen:
    foo<simple_policiy> foo1;
    foo<extra_policy<5> > foo2;
    

    Oder versteh ich was falsch?

    Grüssli



  • Du hast auf die traits vergessen.



  • struct simple_policy {
      template<typename Traits>
      struct policy { ... };
    };
    
    template<int X>
    struct extra_policy {
      template<typename Traits>
      struct policy { ... };
    };
    
    template<typename Policy, typename Traits>
    struct foo {
      typedef typename Policy::template policy<Traits> policy;
    }
    

    Oder fragments.


Anmelden zum Antworten