template-klasse von nicht-template-klasse ableiten



  • Hi Leuts,

    geht sowas? Also:

    class A {
      };
    
    template<typename T> class B : A {
      T f(T) {}
      };
    

    🙄 ok, das geht, schon probiert. Kann ich jetzt aber fuer die Funktion f eine virtuelle Basis-funktion schreiben, oder habe ich damit die Grenzen von C++ gesprengt ... 😕



  • c-plusplus-fan schrieb:

    ...Kann ich jetzt aber fuer die Funktion f eine virtuelle Basis-funktion schreiben, ...

    Jau, kannst Du machen (hast Du das nicht ausprobiert ?), aber obacht: "virtual schützt vor overloading nicht !"

    Wenn Du mit dem template-Parameter nicht den Typ des Parameters der "Basisklassenfunktion" "triffst", passiert nicht das, was Du erwartest:

    class A {
    protected:
        virtual int f(int);
    };
    
    template<typename T> class B : public A {
    protected:
        T f(T) {}
    }; 	
    
    int main() {
        B<int> b; // hat eine (overridden) Funktion int f(int)
        B<double> c; // hat zwei Funktionen: int f(int) und double f(double);
    ...
    

    Insgesamt halte ich das für keinen glücklichen Ansatz.

    Gruß,

    Simon2.


Anmelden zum Antworten