Austausch von Implementierungsdetails zw. Klassen



  • Guten Abend,

    entschuldigt bitte den vielleicht nicht ganz zutreffenden Titel, aber die Thematik ist in kurzen Worten nicht so ganz einfach zu beschreiben (oder mir fehlen die passenden Worte. Sucht es euch aus 😉 ).
    Ich mache die Fragestellung mal an einem Beispiel fest:

    class RenderWindow
    {
        HWND handleToWin;
        void createWindow();   // hier wird der ganze windows-spezifische Kram abgeackert, um das Fenster zu initialisieren
    };
    

    Nach außen hin möchte man solche Details wie das Handle natürlich nicht preisgeben. Dennoch bedarf es oftmals den Austausch gerade jenen Handles, um auch andere Resourcen zu initialisieren, weil die Implementierung anderer Funktionen darauf aufbaut. Problematisch ist dies vor allem immer dann, wenn die Resourcen in "meiner" Programmlogik in keinem unmittelbaren Verhältnis zueinander stehen. Trotzdem bindet einen die Implementierung an eine gewisse Grundstruktur.

    Jetzt meine Fragen hierzu:
    (i) Ist es legitim, implementierungsspezifische Daten über öffentliche Methoden auszutauschen? (Hier würde ich einfach nur gerne "Nein" schreien... Wie steht es mit Konstruktoren?)

    (ii) Sind friends die bessere Alternative um gerade solche Details auszutauschen?

    (iii) Wie handhabt ihr das? 😉



  • Impl schrieb:

    (iii) Wie handhabt ihr das? 😉

    Erstmal nutze ich Konstruktoren und Destruktoren, eine Methode createWindow zu sehen tut weh.
    Abgesehen davon ist eine void* native_handle() Methode wohl zu vertreten. (std::thread macht's vor.)
    Nicht dass ich rundum zufrieden damit wäre, aber es ist einfach und praktisch. Und ich denke mal die Fehleranfälligkeit hält sich doch stark in Grenzen, solange alle render_window Objekte auf einem System auf dem gleichen Unterbau basieren, was mir recht sinnvoll erscheint.


Log in to reply