Entkoppeln von Objekten mit C++-Interfaces oder boost-bind &-function   December 15th, 2010

Hallo zusammen,

in diesem Post möchte ich euch etwas erzählen, über das Entkoppeln von Objekten durch Callbacks mit C++-Interfaces oder boost::function und boost::bind. Der Post ist diesmal als PDF Datei eingebunden. Hintergrund ist, dass das PDF einem Workshop entstammt, den ich im November 2010 zu eben diesem Thema in unserer Firma gehalten habe. Als Beispiel sind zwei Klassen vorgegeben: eine Klasse A und eine Klasse B. Klasse A inkludiert die Klasse B und benutzt diese. Im ersten Szenario muss die Klasse B von der Klasse A nichts wissen. Im zweiten Szenario muss die Klasse B auch die Klasse A zum Zwecke eines Rückrufs kennen. Dazu benutzt sie einen Zeiger auf A, was diverse Probleme mit sich bringt. In den folgenden Lösungsansätzen wird aufgezeigt, wie mithilfe von C++ – Interfaces oder boost::bind und boost::function die Klasse B von der Klasse A entkoppelt werden kann. In einem weiteren Szenario wird gezeigt, wie man mithilfe von Vorwärtsdeklaration, dem Verwenden eines Zeigers in der Deklaration (anstatt einer kompletten Klasse) dem inkludieren der Klassendeklaration in der CPP-Datei und dem Anlegen des verwendeten Objekts im Konstruktor und dem Zerstören des Objekts im Destruktor, die Include-Abhängigkeiten nach oben terminiert werden können, was sich wiederum positiv auf die Übersetzungszeiten auswirkt. Im Anschluss daran folgen noch ein paar weitere Beispiele zu verzögerten Funktionsaufrufen mithilfe von boost::function und boost::bind. Für Tipps, Korrekturen und konstruktive Kritik (, natürlich aber auch für Zuspruch :-)) bin ich sehr dankbar. Viel Spaß mit dem PDF:

c++_entkoppeln_durch_interfaces_oder_boost_funktions_zeiger

Gruß,

Daniel

Tags: , , , , , , , ,
This entry was posted on Wednesday, December 15th, 2010 at 22:29 and is filed under C++ (and more...). You can follow any responses to this entry through the RSS 2.0 feed.You can leave a response, or trackback from your own site.

No Responses

Leave a Reply