Gibt es in C++ eine Referenz auf die jeweilige Klasse?
-
Hallo,
ich möchte gerne etwas der folgenden Art realisieren:#include <iostream> using namespace std; class Papa { public: virtual void name() = 0; static Papa * create() { return new self(); } }; class Sohn : Papa { public: void name() { cout << "Sohn" << endl; } }; class Tochter : Papa { public: void name() { cout << "Tochter" << endl; } }; int main(int argc, char ** argv) { Papa * ref; ref = Sohn::create(); ref->name(); ref = Tochter::create(); ref->name(); /* Output: * Sohn * Tochter */ return 0; }Gibt es eine Möglichkeit, etwas derartiges zu basteln?
Ich möchte es eigentlich in einem Singleton nutzen ohne in den Kindklassen die create-Funktion jedesmal schreiben zu müssen.
-
Mal von den Speicherlecks in deinen Beispiel abgesehen (und noch ein paar anderen kleineren Problemen, die ich mit getrennten Speichermanagement habe):
// [Ungetestet] class IBase { public: virtual void name() = 0; }; template<typename T> class TBase : public IBase { public: static T * create() { return new T(); } }; class A : public TBase<A> { }; class B : public TBase<B> { }; int main() { IBase * ref = A::create(); ref->name(); delete ref; }