String ausführen / String in Schlüsselwort umwandeln
-
(Notfalls würde ich statt String auch ein Chararray nehmen.)
Ich habe zwei Fragen die aber beide fast auf das gleiche herauskommen.
#include <string> #include <iostream> using namespace std; int main() { string testvariable = "test"; string command = "cout << testvariable << endl;"; command return 0; }Wie kann ich den Inhalt von 'command' evaluieren?
Oder hier ein anderes Beispiel wo fast das gleiche hilfreich sein könnte.
[#include <cstdarg> #include <iostream> #include <string> using namespace std; void test(int num, string type, ...); int main() { test(3, 5, 6, 6); test(10, "int", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); return 1; } void test(int num, string type, ...) { cout << "new" << endl; va_list arguments; va_start(arguments, num); for (int i = 0 ; i < num ; i++) { cout << va_arg(arguments, type) << endl; } va_end(arguments); }Ich hätte im zweiten Beispiel gerne das 'type' dynamisch übergeben werden kann, also das ich mir zwischen int, double, string etwas aussuchen kann.
-
Das schreit ja geradezu nach einer Templatefunktion.

-
Muss ich da unbedingt mit so schweren Geschützen auffahren?
Also wenn es noch eine simplere Methode gäbe wäre das toll.Mit templates könnte ich zwar das zweite Beispiel lösen, nicht aber den String ausführen.
-
Hi,
prinzipiell geht das zur Laufzeit gar nicht, weil C++ eine Sprache ist, die auf Typsicherheit zur Compilezeit basiert. Wen Du sowas wirklich brauchst, wirst Du (aber auf dem Feld bin ich absolut unterinformiert) wohl mit Skriptsprachen besser bedient sein.
Bedenke aber immer, dass "Typsicherheit zur Compilezeit" ein recht hohes Sicherheitsmerkmal ist, auf das man dann eben verzichtet.Wenn "zur Compilezeit" ausreicht, sind templates gut und so ziemlich das einfachste, was es gibt - einfacher geht's nicht.
Gruß,
Simon2.
-
Und fürs erste wäre ne Boost-Gramatik doch was ... dann halt für die einzellnen strings(befehle) ne funktion hinterlegen und fertig ...
-
(D)Evil schrieb:
Und fürs erste wäre ne Boost-Gramatik doch was ... dann halt für die einzellnen strings(befehle) ne funktion hinterlegen und fertig ...
Nunja, wenn ich recht verstehe, möchte der OP sich aber nicht erst selbst eine Grammatik ausdenken, sondern direkt einen "C++-Interpreter" haben...
So reizvoll diese Idee auch ist: Nach meiner Erfahrung ist das ein typisches Beispiel für "zu Tode flexibilisiert" = "Lohnt nicht".
Wenn man wirklich so ein Teil hat, hat man damit keine Vorteile mehr gegenüber einem Compiler, denn die Syntax für meinem "Interpreter" ist nicht weniger komplex als C++ selbst.Gruß,
Simon2.
-
was soll das werden?
-