[C++] Registrieren von Methoden - std::function, lambdas,...
Verfasst: 21.08.2016, 21:22
Hallo zusammen,
mir fiel es nicht ganz leicht, einen passenden Betreff zu finden, und ich hoffe somit, dass die folgende Erläuterung verständlich ist: Ich möchte bei einer Klasse (bzw. deren Instanz) Methoden anderer Klassen (Module) registrieren, d.h. bekannt geben, dass ein Modul eine Methode zur Verfügung stellt und Zugriff auf diese bieten.
Die erstgenannte Klasse ist die Schnittstelle zu Webclient, Lua-Scripting und weiteren internen Modulen, eine abstrakte Schicht über der darunterliegenden Engine. Ein Lua-Script soll nun genau wie ein Webclient Methoden nutzen können (lesend wie schreibend), also bespielsweise get_objects oder set_time. Diese werden von den Engine-Modulen zur Verfügung gestellt und bei der Schnittstelle registriert.
So sagt ein Datenmanager etwas wie
ein Systemmanager sinngemäß
Wie löse ich so etwas am Besten? Momentan schwebt mir etwas vor wie eine unordered_map in der Schnittstelle, die z.B. einen String als Schlüssel registriert und dahinter eine Methode über ein Lambda mittels std::function ablegt. Allerdings sehe ich noch nicht, wie ich mit verschiedenen Parametern, Rückgabewerten etc. umgehen soll. Dafür wieder abstrakte Interfaces scheint mir zu umständlich, gibt es dafür eine einfache Lösung oder ein Best-Practice?
Viele Grüße, smurfer
mir fiel es nicht ganz leicht, einen passenden Betreff zu finden, und ich hoffe somit, dass die folgende Erläuterung verständlich ist: Ich möchte bei einer Klasse (bzw. deren Instanz) Methoden anderer Klassen (Module) registrieren, d.h. bekannt geben, dass ein Modul eine Methode zur Verfügung stellt und Zugriff auf diese bieten.
Die erstgenannte Klasse ist die Schnittstelle zu Webclient, Lua-Scripting und weiteren internen Modulen, eine abstrakte Schicht über der darunterliegenden Engine. Ein Lua-Script soll nun genau wie ein Webclient Methoden nutzen können (lesend wie schreibend), also bespielsweise get_objects oder set_time. Diese werden von den Engine-Modulen zur Verfügung gestellt und bei der Schnittstelle registriert.
So sagt ein Datenmanager etwas wie
Code: Alles auswählen
register("get_objects",...)
Code: Alles auswählen
register("set_time",...)
Viele Grüße, smurfer