Gibt es C / C ++ - Äquivalent von eval ("function (arg1, arg2)")?
es muss ein Weg, um call-Funktion, deren name ist gespeichert in einem string ähnlich eval. Können Sie mir helfen?
Kommentar zu dem Problem
Nein, Ihre beste Wette ist, den Befehl Muster.
Wenn Sie bereit sind, zu beugen die Kraft der qt, ja: qt-project.org/doc/qt-4.8/QMetaObject.html
Es gibt einige C++ - Interpreter: stackoverflow.com/questions/69539/...
-1 Dies ist eine schreckliche Idee und ich kann nicht guten Gewissens ermutigen. Wenn Sie in die Gewohnheit, Probleme zu lösen, die mit
eval
, Sie sind immer in einem sehr, sehr schlechten Gewohnheit. Ihr code wird langsam, ineffizient, anfällig und schwer zu verstehen. So, weil es schlechte Praxis, nicht zu wissen von seiner Existenz und die Möglichkeiten? Way to go buddy! Ich konnte nicht ignorieren Sie Ihren Vortrag in ein gutes gewissen.
InformationsquelleAutor der Frage Dipesh Kc | 2012-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
C++ nicht Reflexion, so dass Sie müssen es zu hacken, ich. e.:
InformationsquelleAutor der Antwort Hauleth
Gibt es mindestens 2 alternativen:
GetProcAddress
um einen Rückruf von Namen, unddlopen
+dlsym
auf *nix.InformationsquelleAutor der Antwort Luchian Grigore
Könnten Sie versuchen, zu erlassen, um eine vorhandene scripting-engine, setzen Sie die Funktionen, die Sie möchten und dann verwenden Sie diese, um bewerten Sie Ihre Aussagen. Eine solche enging könnte der V8-Motor: https://developers.google.com/v8/intro aber es gibt viele alternativen und verschiedene Sprachen, um von zu wählen.
Hier sind einige Beispiele:
InformationsquelleAutor der Antwort Tommy Andersen
Außer über die Funktion Karte in das Programm, und Hacke es auf das Makefile, Sie können es durch ELF.
Ich denke diese Methode ist besser, da Sie nicht brauchen, um doppelten code schreiben und kompilieren Sie es jedes mal auf andere Maschine.
Hier ist meine demo - C/C++ - äquivalent eval("function(arg1, arg2)")
Diese Implementierung basiert auf Beispiel für das Drucken der ELB-Symbol-Tabelle
InformationsquelleAutor der Antwort YongHao Hu
InformationsquelleAutor der Antwort DavidA