designfrage: alternative für mehrfachvererbung



  • Hallo

    ich schreibe einen Wrapper für eine COM-Schnittstelle. das ergebniss soll
    später ebenfalls COM-kompatibel sein, damit das in bestehenden Code eingefügt
    werden kann.

    Dabei gibt es ein Basisinterface meiner Klasse, was von IUnknown erbt.
    Die Implementation kümmert sich nur um die IUnknown-Funktionen sowie um einige
    standartfunktionen die ich nicht in jeder (bis zu 😎 verschiedenen unterklassen
    implementieren will.

    Allerdings sind die Oberklassen alle abstrakt und werden später ausgelagert.

    von diesen wiederrum erben dann die interfaces, die ebenfalls abstrakt sind.

    das problem ist dann die implementation der abgeleiteten klasse. diese muss ja
    sowohl das spezielle interface der abgeleiteten klasse an bord haben, sowie
    die implementationsklasse des oberinterfaces (was für ein wort).

    struct Base : public IUnknown
    {
        virtual allgemeine_funktion() = 0; // für alle deriveds gleich
    };
    struct Derived : virtual public Base
    {
        virtual spezial_funtkion() = 0;
    };
    // ===============================================
    class Base_impl : virtual public Base
    {
    public:
        allgemeine_funktion(){}
    protected:
        allgemeine_daten d;
    };
    class Derived_impl : public Derived, public Base_impl
    {
    public:
        spezial_funtkion(){}
    };
    

    sinn der ganzen aktion ist eigentlich nur zu verhindern, in jeder abgeleiteten
    klasse das selbe zu schreiben.

    1. Frage: gibt es andere ansätze um das Problem zu lösen?
    2. Frage: (nutze MV eigentlich _nie_) kann es dabei probleme geben?
    ala 2 vtbls, doppelte daten, etc.



  • virtual_user() schrieb:

    sinn der ganzen aktion ist eigentlich nur zu verhindern, in jeder abgeleiteten
    klasse das selbe zu schreiben.

    public vererbung ist eine "is a" beziehung.
    deine beschreibung klingt mehr nach "ist implementiert mit hilfe von". also private vererbung oder layering.



  • Shade Of Mine schrieb:

    [...] "ist implementiert mit hilfe von". also private vererbung oder layering.

    genau sowas möchte ich machen. kann man das ohne mehrfachvererbung
    (aber im klassendesign) lösen?



  • virtual_user() schrieb:

    Shade Of Mine schrieb:

    [...] "ist implementiert mit hilfe von". also private vererbung oder layering.

    genau sowas möchte ich machen. kann man das ohne mehrfachvererbung
    (aber im klassendesign) lösen?

    Shade hat ja bereits gesagt, dass eine private Vererbung das bedeutet..


Anmelden zum Antworten