Thomas Darimont
Erfahrenes Mitglied
Hallo,
Ein Proxy ( http://en.wikipedia.org/wiki/Proxy_pattern ) ist ein Design Pattern. Dabei realisiert der Proxy das Interface eines bestimmten Zielobjekts und "Wrapped" dieses.
Der Proxy kann über das Interface des Zielobjekts angesprochen werden. Methodenaufrufe am Proxy werden werden dann in die entsprechenden Methodenaufrufe am Zielobjekt übersetzt. Diesen Mechanismus verwendet man beispielsweise um bevor, nach oder um den Methodenaufruf am Zielobjekt herum zusätzlichen Code ausführen zu können.
Beispielsweise startet man vor dem Methodenaufruf eine Datenbanktransaktion (führt Zugriffsberechitungschecks o.ä aus). Nach erfolgreichem Aufruf commited man dann die Transaktion oder macht ein rollback falls eine bestimmte Exception aufgetreten ist.
Neben der statischen Version dieses Patterns gibts unter vielen Platformen (wie Beispielsweise Java und .Net) auch dynamische Versionen, welche die Interfaces der Zieltypen die der Proxy realisieren soll zur Laufzeit übergeben bekommen.
Siehe:
http://java.sun.com/javase/6/docs/api/java/lang/reflect/Proxy.html
Nun interessiert mich ob und vor allem wie man diese dynamischen Proxies auch mit C++ realisieren kann.
Im Netz findet man dazu mehrere Ansätze. Ein Ansatz (Function Wrappers) stammt von niemand geringerem als Bjarne Stroustrup. Die dort vorgestellte Variante hat jedoch den Nachteil, dass der Code, den man dem Methodenaufruf Vor-/nachschaltet nicht auf die Parameter der aufgerufenen Methode zugreifen kann. Das ist eine ziemlich starke Einschränkung...
hier müsste man dann Beispielsweise zur Threadsicheren auf statische Thread-lokale Variablen zugreifen...
http://www.research.att.com/~bs/wrapper.pdf
Eine andere Möglichkeit sowas ähnliches zu realisieren wäre wohl der Einsatz von aspect++
http://www.aspectc.org/
Was meint ihr dazu? Hat jemand vielleicht noch eine andere Idee?
Gruß Tom
Ein Proxy ( http://en.wikipedia.org/wiki/Proxy_pattern ) ist ein Design Pattern. Dabei realisiert der Proxy das Interface eines bestimmten Zielobjekts und "Wrapped" dieses.
Der Proxy kann über das Interface des Zielobjekts angesprochen werden. Methodenaufrufe am Proxy werden werden dann in die entsprechenden Methodenaufrufe am Zielobjekt übersetzt. Diesen Mechanismus verwendet man beispielsweise um bevor, nach oder um den Methodenaufruf am Zielobjekt herum zusätzlichen Code ausführen zu können.
Beispielsweise startet man vor dem Methodenaufruf eine Datenbanktransaktion (führt Zugriffsberechitungschecks o.ä aus). Nach erfolgreichem Aufruf commited man dann die Transaktion oder macht ein rollback falls eine bestimmte Exception aufgetreten ist.
Neben der statischen Version dieses Patterns gibts unter vielen Platformen (wie Beispielsweise Java und .Net) auch dynamische Versionen, welche die Interfaces der Zieltypen die der Proxy realisieren soll zur Laufzeit übergeben bekommen.
Siehe:
http://java.sun.com/javase/6/docs/api/java/lang/reflect/Proxy.html
Nun interessiert mich ob und vor allem wie man diese dynamischen Proxies auch mit C++ realisieren kann.
Im Netz findet man dazu mehrere Ansätze. Ein Ansatz (Function Wrappers) stammt von niemand geringerem als Bjarne Stroustrup. Die dort vorgestellte Variante hat jedoch den Nachteil, dass der Code, den man dem Methodenaufruf Vor-/nachschaltet nicht auf die Parameter der aufgerufenen Methode zugreifen kann. Das ist eine ziemlich starke Einschränkung...
hier müsste man dann Beispielsweise zur Threadsicheren auf statische Thread-lokale Variablen zugreifen...
http://www.research.att.com/~bs/wrapper.pdf
Eine andere Möglichkeit sowas ähnliches zu realisieren wäre wohl der Einsatz von aspect++
http://www.aspectc.org/
Was meint ihr dazu? Hat jemand vielleicht noch eine andere Idee?
Gruß Tom