Log-File Verarbeitung
-
Hallo zusammen,
ich habe den folgenden Sachverhalt, und auch einen ersten Lösungsansatz, doch denke ich dass dieser womöglich nicht ganz optimal ist, habt ihr irgendwelche Tipps/Vorschläge?
Meine Ausgangslage: Ich habe eine in C++ geschrieben DLL, die darin enthaltenen Interface-Methoden werden über eine GUI angesprochen, jeder Aufruf einer Interface-Methode wird in einem speziellen Log-File mitgeloggt (es werden in diese File nur die Funktionsaufrufe samt deren Parameterliste geschrieben). Nun soll es ermöglicht werden die einzelnen Funktionsaufrufe aus dem Log-File auszulesen und diese auszuführen.
Gibt es hierzu nun eine andere Möglichkeit als zuerst den entsprechenden Methodennamen auszulesen und in einem großen if-else if-else Statement nach der korrekten Behandlungsroutine zu suchen? Nachteil an dieser Lösung ist, dass es zu einem sehr länglichen Konstrukt kommen würde, da die Anzahl der verschiedenen Methoden gegen 200 geht. Die einzelnen Methoden besitzen dann natürlich auch noch die unterschiedlichsten Parameterlisten. Vorteil der if-else if-else Lösung wäre mit Sicherheit deren Einfachheit.
Nun noch mal zu meiner Frage ist es möglich den Mechanismus in irgendeiner Art und Weise dynamischer zu machen, so dass nicht ein rießiges if-else Konstrukt benötigt wird, oder gibt es beim Einsatz von C++ keine andere Möglichkeit?
Danke für eure Antworten
Jens
-
Hallo Welt
Sowas könnte man mit Reflection machen, wenn es das in C++ geben würde.
Sonst kannst du dir ne map mit Methodenname<->Methodencallmethode machen. Die Methodencallmethode bekommt dann die Parameter als einen String und zerlegt sie für die Methode die sie aufruft.
-
Mach doch alle deine Funktionen zu einem Funktionspointertyp aller:
bool funk(vector<string> arParams, vector<string> arReturns);
Lese dann die jeweiligen Parameter und Ergebnisse direkt in dem Funktionswrapper/der Funktion aus. Wenn du auf Datentypen Wert legst klappt das so natürlich nicht, aber in deiner Log steht ja eh alles als Strings.
Dann mach dir ne map mit Funktionsnamen als schlüssel und Funktionspointer als Value. Zusätzlich kannst du dir natuerlich als Value eine Struktur basteln die die min/max Anzahl an benötigten Parameter für die Funktion beinhaltet. Das ganze kann man dann recht einfach nutzen...
-
An Reflection hatte ich in meiner Angelegenheit auch gedacht, da ich selbst aus der Java-Welt komme.
Allerdings gibts das ja nicht direkt in C++, hab da allerdings ein Projekt unter http://seal-reflex.web.cern.ch/seal-reflex/ entdeckt, hat jemand von euch schon mal damit gearbeitet bzw. Erfahrung damit? Oder kennt ihr ein anderes passendes Projekt?Danke Jens