templates templates....



  • Hi, ich habe folgenden compilenden code:

    template<typename typeA> class A {
        A.CODE
        template<typename typeB> class B {
            B.CODE
        };
        A.CODE
    };
    

    , würde den code von B aber lieber außerhalb von A hinschreiben, also

    template<typename typeA> class A {
        A.CODE
        template<typename typeB> class B;
        A.CODE
    };
    
    template<typename typeA> template<typename typeB> class A<typeA>::B<typeB> {
        B.CODE
    };
    

    , krieg aber beim besten Willen die Syntax nich hin.
    Allgemein: Sowohl A als auch B sollen als template argumente typen übergeben bekommen, also z.B. float oder int; der typ von B ist dabei von A völlig unabhängig.
    Wär über konstruktive Vorschläge sehr dankbar 🙂


  • Mod

    template<typename typeA> template<typename typeB> class A<typeA>::B<typeB> {
        B.CODE
    };
    

    Damit wird eine partielle Spezialisierung des Templates A<typeA>::B deklariert. Allerdings stimmt die Argumentliste <typeB> mit der impliziten Argumentliste des Primärtemplates ein - das ist nicht erlaubt und würde auch das Primärtemplate überflüssig machen. Da du hier aber gar nicht spezialisieren willst, sondern nur die Definition des Primärtemplates A<typeA>::B angeben willst, darf keine Argumentliste benutzt werden:

    template<typename typeA> template<typename typeB> class A<typeA>::B {
        ...
    };
    


  • Ahh funktioniert und ne Erklärung gleich mit dabei : D
    Vielen Dank,war seit Tagen auf der Suche nach eben dieser Antwort.


Anmelden zum Antworten