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;
    }
    

Anmelden zum Antworten