Pedantische Template Frage



  • Hi, ist es möglich das IMyInterface so zu implementieren, dass sowohl

    class MyClass : public Base, IMyInterface {...};
    

    als auch

    class MyClass : public Base, IMyInterface<MyClass> {...};
    

    möglich ist? Dies hier geht leider nicht

    class IMyInterface
    {
    public:
    	virtual Base* MyFunction() const = 0;
    };
    
    template <class T>
    class IMyInterface
    {
    public:
    	virtual T* MyFunction() const = 0;
    };
    

    Was dagegen geht ist das hier

    template <class T = Base()>
    class IMyInterface
    {
    public:
    	virtual T* MyFunction() const = 0;
    };
    

    mit

    class MyClass : public Base, IMyInterface<> {...};
    

    Allerdings würde ich das leere <> gerne vermeiden.



  • Nein, das geht afaik nicht - Templates und (reguläre) Klassen sind etwas unterschiedliches und werden auch unterschiedlich vom Compiler verwendet.
    (bei einem Funktionsaufruf kannst du schließlich auch nicht die Klammern () weglassen, selbst wenn die Funktion keine Parameter braucht)


Anmelden zum Antworten