Multiple Vererbung



  • Ich hab folgendes Szenario: Ich möchte alte C Structs wrappen.

    Dies ist nicht das Problem

    struct OldC {int old;}; 
    typedef struct OldC OldC;
    struct NewC : OldC {}; 
    typedef struct NewC NewC;
    

    Das klappt und ist nutzbar. Nun habe ich ne menge C-Structs und derer gewrappte Erblinge und möchte diese einheitlich durch ein Cursor-Konzept verwalten, sprich auf alle Typen die gleichen Methoden anwenden

    Ich habe also eine Menge Structs mit dem Namen NewC1, NewC2, NewC3, die nicht polymorph sind. Durch mehrfache Vererbung kann ich meine NewCs ja von einem gemeinsamen vorfahren erben lassen

    struct NewC1 : OldC1 , Foo{};
    struct NewC2 : OldC2 , Foo{};
    

    So könnte ich nem vector<Foo> theoretisch alle NewCs speichern aber nicht auf die Variablen von OldC zugreifen, korrekt? Das erbt ja nicht von Foo



  • Sehe ich das richtig, dass Du versuchen willst, möglichst viele verschiedene Typen in den gleichen Vektor zu packen?



  • Ja, so ungefähr, ich habe über 40 gewrappte C Structs und viele haben in der Regel die gleichen Attribute. Ich untersuche also, ob es möglich ist, diese verschiedenen Elemente einheitlich durch ein Cursor- oder Iterator-Konzept zu bearbeiten. Quasi ne addMeinMagic Methode, die auf allen Structs arbeitet.
    Im Moment bin ich der Meinung, dass es nicht so geschickt wäre, dies zu tun



  • Kannst Du mal ein paar Beispiele für Deine C-Stukturen geben (wenns geht, konkrete, keine hypothetischen), und nochmal genau beschreiben, was Du mit den Strukturen machen willst?



  • Der war schon recht konkret, hier ein Beispiel:

    struct Attribute{
    	char *name;
    	char *val;
    
    };
    typedef struct Attribute Attribute;
    
    struct Aggr {
    	char *name;
    	char *val;
    	int typ;
        Attribute attr;
    };
    typedef struct Aggr Aggr;
    
    struct Vec2D {
    	double x;
    	double y;
        Attribute attr;
    };
    typedef struct Vec2D Vec2D;
    

    Dies sind die C-Structs und für mich versiegelt, ich kann diese nicht modifizieren.



  • Die Strukturen repräsentieren doch jeweils völlig unterschiedliche Dinge. Du solltest nicht aus purer Bequemlichkeit versuchen, das irgendwie zusammenzufassen.
    Separate Dinge sollte man auch separat speichern.
    Evtl. kann man eine Union mit einem Typeswitch nehmen, da es POD-Typen sind, aber schön ist das auf jeden Fall nicht.



  • Geht nicht um Bequemlichkeit. Wollte nur verschiedene Ansätze und deren Probleme aufführen, bin ja deiner Meinung.

    Edit: Achja: Arbeitet die Polymorphie auf Klassen oder Objekten? Auf Klassen, oder?



  • Seikilos schrieb:

    Geht nicht um Bequemlichkeit. Wollte nur verschiedene Ansätze und deren Probleme aufführen, bin ja deiner Meinung.

    Edit: Achja: Arbeitet die Polymorphie auf Klassen oder Objekten? Auf Klassen, oder?

    Kommt auf die Art der Polymorphie an. Es gibt statische und dynamische. Erstere arbeitet auf Klassen (Templates) und zweitere auf Objekten.


Anmelden zum Antworten