variable structs an constructor übergeben



  • Hallo mein Problem ist das folgende:

    Ich habe eine Klasse A welche mit Sructs von außerhalb arbeitet. Jedesmal wenn ich ein Objekt von A erzeuge kann das übergebene Struct an den constructor aderst zusammengesetzt sein. Deshalb habe ich ja keine bestimmte Definition bzw Deklaration des Structs, kann oder muss ich das ganze dann mit Templates realisieren? Hat jemand vielleicht einen Tipp?

    Danke


  • Mod

    beispiel? sinn?



  • Ich will in einem Objekt structs ablegen aber mich auf kein bestimmtes struct festlegen.


  • Mod

    boost::any



  • Unabhängig vom Sinn: Mit Templates geht das auf alle Fälle, eine andere Möglichkeit ist eine Basisklasse (bzw. -Struktur, ist ja quasi das gleiche), die Du als Formalparametertyp angibst - als tatsächlichen Parameter kannst Du dann eine Kindklasse angeben. Allerdings geht das nur mit Zeigern oder Referenzen.

    Um was mit den Argumenten dann machen zu können, musst Du entweder auf eine Eigenschaft bzw. Methode zugreifen, die in der Basisklasse vorhanden ist (im zweiten Fall) bzw. bei Templates wird es einen (anderen) Kompilierfehler geben, wenn Du auf Member zugreifst, die nicht vorhanden sind.



  • Das mit der Basisstruktur hört sich gut an, hättest du da vielleicht ein Codebeispiel wie das aussehen könnte?

    Danke



  • class Base
    {
    public:
        void DieseMethodeBraucheIchUnbedingt( void );
    };
    
    class SubA : public Base
    {
    
    };
    
    class SubB : public Base
    {
    
    };
    
    class FOO
    {
    public:
        FOO( const Base& aBase );
    
    };
    


  • Kuck Dir mal das an:

    #include <iostream>
    using namespace std;
    
    struct Base {
    	virtual void f() { cout << "base.f()" << endl; }
    };
    
    struct A : Base {
    	virtual void f() { cout << "A.f()" << endl; }
    };
    
    struct B : Base {
    	virtual void f() { cout << "b.f()" << endl; }
    };
    
    struct Work {
    	Work(Base& b) { b.f(); }
    };
    
    int main()
    {
    	A b;
    	Work w(b);
    }
    

    Anstelle der Referenz würde auch ein Zeiger gehen - aber kein Werttyp!



  • Danke für die Hilfe.


Anmelden zum Antworten