führt C ++ aus der String-Variablen aus

9

In C ++ ist es möglich, den C ++ - Code aus einer String-Variablen auszuführen. Wie in Javascript:

%Vor%

Ich möchte etwas sehr ähnliches wie Javascript in C ++. Wie geht das?

    
Jigberto 05.04.2013, 19:01
quelle

5 Antworten

8

Sie müssen einen Compiler aufrufen, um den Code zu kompilieren. Außerdem müssen Sie Code generieren, um die Zeichenfolge in eine Funktionsdeklaration zu integrieren. Schließlich müssen Sie dann irgendwie den kompilierten Code laden.

Wenn ich dies tun würde (was ich nicht nicht ) würde ich:

  1. Verketten Sie einen Standard-Wrapper-Funktionskopf um den Code
  2. Rufen Sie einen Compiler über die Befehlszeile ( system() ) auf, um ein Shared zu erstellen Bibliothek ( .dll auf Windows oder .so auf Linux)
  3. Laden Sie die gemeinsam genutzte Bibliothek und ordnen Sie die Funktion
  4. zu
  5. Rufen Sie die Funktion
  6. auf

Dies ist wirklich nicht die Art, wie Sie C-Code in den meisten Fällen schreiben möchten.

    
tletnes 05.04.2013, 19:07
quelle
9

Nein, C ++ ist ein statischer Typ, der in eine native Binärsprache kompiliert wurde.

Obwohl Sie die LLVM-JIT-Kompilierung verwenden können, kompilieren und verknüpfen Sie sie, ohne die Laufzeitumgebung zu unterbrechen. Sollte machbar sein, aber es ist einfach nicht in der Domäne von C ++.

Wenn Sie eine Skript-Engine unter C ++ verwenden möchten, können Sie zum Beispiel JS verwenden - es ist mit Abstand die schnellste dynamische Lösung auf dem Markt. Lua, Python, Ruby sind auch in Ordnung, aber in der Regel langsamer, was keine schreckliche Sache sein kann, wenn man bedenkt, dass Sie es nur für das Scripting verwenden.

In Qt können Sie beispielsweise Folgendes tun:

%Vor%

Und du wirst 50 bekommen;)

    
dtech 05.04.2013 19:08
quelle
5

Direkt, nein. Aber du kannst:

  • schreibe diese Zeichenfolge in eine Datei.
  • rufen Sie den Compiler auf und kompilieren Sie diese Datei.
  • Führe die resultierende Binärdatei aus.
Luchian Grigore 05.04.2013 19:06
quelle
3

C ++ ist eine kompilierte Sprache. Sie kompilieren C ++ Quelle in Maschinencode, die ausführbare Datei. Das wird geladen und ausgeführt. Der Compiler kennt C ++ (und alle Header der Bibliothek sind verfügbar). Die ausführbare Datei tut dies nicht und deshalb kann sie keine Zeichenfolge in ausführbaren Code umwandeln. Sie können den Inhalt eines Strings ausführen, wenn er Maschinencode-Anweisungen enthält, aber das ist im Allgemeinen eine sehr schlechte Idee ...

Das bedeutet nicht, dass es nicht möglich wäre , diese Art der Laufzeitkompilierung durchzuführen. Sehr wenig (wenn überhaupt) ist in C ++ unmöglich. Aber was Sie tun würden, würde ein C ++ - Compiler-Objekt implementieren ... schauen Sie sich andere Compiler-Projekte an, bevor Sie entscheiden, dass Sie das wirklich wollen.

Interpretierte Sprachen können dies mit Leichtigkeit tun - sie müssen lediglich die Zeichenfolge an den Interpreter übergeben, der das Programm bereits ausführt. Sie zahlen diese Flexibilität in anderer Hinsicht.

    
DevSolar 05.04.2013 19:06
quelle
0

Kurze Antwort ist nein. Hacker würden einen Feldtag haben. Sie können jedoch die Windows IActiveScriptSite-Schnittstelle verwenden, um Java / VB-Skript zu verwenden. Google IActiveScriptSite gibt es zahlreiche Beispiele im Internet. Oder Sie können tun, was ich gerade mache, rollen Sie Ihre eigene Skript-Engine.

    
user2225284 05.04.2013 19:07
quelle

Tags und Links