String als Funktion
-
folgende Situation:
Eine Klasse, in der der User einen String eingibt (sagen wir: "func()" ), der später als Funktion ausgeführt werden soll.
Wie läßt sich der Compiler dazu bewegen, diesen String nicht als Textkette, sondern als Funktionsaufruf zu interpretieren?
-
du kannst dies leicht mit std::map und Funktionspointern (oder besser noch boost::function machen, dazu musst du aber die boost Library installieren http://www.boost.org)
#include <map> #include <string> #include <iostream> #include <boost/function.hpp> void foo() { std::cout << "möp möp!" << std::endl; } int main() { std::map<std::string,boost::function<void ()> > funcs; funcs["foo()"]=foo; funcs(); }
-
Danke für den Tipp, die Ergänzungen zur STL sehen sehr interessant aus.
Gleichwohl noch einmal die Nachtfrage: ist dieser Fall für das klassische C++ Umfeld nicht vorgesehen? Eigentlich müsste das das doch schon ein Bestandteil von C sein?
In JavaScript gibt es die kleine Funktion "eval", die dies wunderbarerweise besorgt.
-
JavaScript wird interpretiert. Deshalb wird das da angeboten.
-
@kingruedi:
... int main() { std::map<std::string,boost::function<void ()> > funcs; funcs["foo()"]=foo; funcs(); // verstehe ich nicht. }
Kannt du mir die Zeile mit dem Komentar mal erklären?
-
Sollte wohl
funcs["foo()"]();
heißen
-
jo, MaStaH hat recht