Ein möglicher Ansatz sein könnte, will schreiben zu einige einbetten Interpreter (wie Lua, Guile, etc ...) in Ihrer C++ - Anwendung. Dann würde Ihr fortgeschrittener Benutzer ein Skript in dieser Sprache programmieren und kann jede Routine, in die Sie eingebettet sind, aufrufen (d. H. Mit dem Interpreter verbunden oder geklebt werden).
(alternativ Ihren eigenen Dolmetscher schreiben, aber das ist viel mehr Arbeit)
Ein weiterer Ansatz könnte sein, dynamic loading Einrichtungen zu nutzen, aber diese sind betriebssystemspezifisch. Unter Linux (und POSIX) würden Sie dlopen(3) und dlsym(3) verwenden. Achten Sie auf name mangling, verwenden Sie daher extern "C"
für die C++ - Funktionen, die Sie zur Laufzeit mit dlsym
laden möchten (siehe C++ dlopen mini howto).
könnte eine Variante (mit C++ Code) dynamisch einigen C++ Quelle in einer temporären Datei zu erzeugen sein (vielleicht von einigen Benutzereingaben, einige Zwischen AST wollen), fork
eine Zusammenstellung des Codes in eine temporäre plugin und dynamisch, dass dlopen
mit laden, führen Sie es (mit dlsym
erhaltene rohe Funktionszeiger verwenden)
aber (im Gegensatz zu Haskell oder Scheme oder Ocaml) gibt es keine REPL in C++, so dass Sie einen vornehmen müssen (die Tricks Ich dachte oben), wenn Sie einige wollen, und das ist eine schwierige Aufgabe für einen C++ - Neuling. C++ ist praktisch eine Programmiersprache, die kompiliert werden sollte (praktisch mit einer compiler wie GCC oder Clang gestartet von einigen build automation Werkzeug wie GNU make oder ninja). Und C++ ist eine sehr komplexe Sprache, schwer zu lernen und zu kompilieren, so dass alle Compiler sind eher langsam.
BTW, sicher sein, mindestens C++ 11 zu lernen.
Vielleicht möchten Sie einige unit testing. Es gibt Tools und Bibliotheken auf, dass zu helfen (siehe this answer, und auch that list)
Ich könnte einen einfachen Schalter tun, die den Fall von einem
cin recieves
Sie sollten mehr fancy stuff betrachten. Zum Beispiel könnten Sie mindestens einige std::map mit std::string -s Schlüssel und Werte von einigen gemeinsamenstd::function Typ dann verwenden Sie lambda expressions, um es zu füllen.
Sie könnten die neuesten Dragon Book lesen; Es ist hilfreich, Techniken zu analysieren, zu interpretieren und zu kompilieren (und sie sind für Ihren Wunsch relevanter als das, was Sie sich vorstellen könnten).
Lesen Sie auch (frei herunterladbare Einführung in die Programmierung, mit Scheme); Es geht nicht um C++, aber es wird Ihnen helfen, Haskell mit C++ zu verbinden, und Sie werden Ihr Denken über die Programmierung verbessern.
Ein gutes Buch für Anfänger ist die Antwort. – DeiDei
Ich möchte nur einen Weg, um meine Funktionen mit verschiedenen Kasus zu testen, ohne jedes Mal kompilieren – Tom507
C++ ist eine kompilierte Sprache, es gibt keine Möglichkeit, es ohne Kompilierung auszuführen. Wie beim Testen gibt es spezielle Komponententestsuiten, mit denen Sie nur erforderliche Teile bei Bedarf ausführen können, z. B. Microsoft Unit Testing Framework für C++ oder Boost.Test. – VTT