Template-Spezialisierungen



  • Hallo!

    Ich zerbrech mir gerade den Kopf über diese merkwürdigen Template-Spezialisierungen und versteh's einfach nicht.

    Ich habe eine Template-Klasse und möchte für den Fall, dass sie mit einem Zahlen-Typ instanziiert wird, ein paar zusätzliche Member-Funktionen bereitstellen.

    Ich hätte jetzt auf

    template<class T> class ClassA
    

    und

    template<> class ClassA<double> : public ClassA<double>
    

    getippt, aber das ist offensichtlich falsch.

    Vielen Dank für Eure Hilfe

    Martin



  • Wie soll es denn aussehen, wenn eine Klasse von sich selbst erbt????????



  • <loriot>Ach!</loriot>

    Deshalb schrieb ich ja auch was von "offensichtlich falsch". Leider komm ich immer noch nicht drauf, wie man's richtig macht.



  • Eigentlich recht einfach. Geh hin und schreibe in eine Funktion eine Zuweisung die nur bei den von dir gewünschten Typen funktioniert. Dann haut dir der Compiler das Template um die Ohren falls jemand einen unerlaubten Typ verwenden möchte.
    😉



  • Hallo,
    eine Spezialisierung ist eine eigenständige Klasse, die keine direkte Beziehung zum Basistemplate hat. Wenn du gemeinsamen Code haben willst, dann verschiebe den doch einfach in eine gemeinsame Basisklasse:

    template <class T>
    class Common
    {
    public:
        // Methoden
    };
    
    // Basistemplate
    template <class T>
    class ClassA : public Common<T>
    {
    public:
       //
    };
    
    template <> 
    class ClassA<double> : public Common<double>
    {
    public:
       // zusätzliche Methoden für double
    };
    


  • Vielen Dank! Das klappt alles wunderbar. Hätte ich auch selbst drauf kommen können, war jedoch von Bjarne Stroustrups

    template<class T> class Vektor<T*> : private Vektor<void*> { /* ... */ };
    

    zu sehr geblendet.

    Danke für Eure Hilfe.


Anmelden zum Antworten