___ answer3780476 ___

Die Python-Dokumentation enthält eine Seite zum Einbetten von Python in eine C- oder C ++ - Anwendung.

    
___ answer3780571 ___

Warum nicht Boost.Python? Sie können Ihre Datenklassen Python aussetzen und ein Skript / eine Funktion ausführen, wie in hier .

    
___ answer3780440 ___

Wie wäre es mit einer JavaScript-Engine wie V8 ?

?     
___ answer3780626 ___

Vergessen Sie nicht den Grand-Daddy der eingebetteten Skriptsprache - tcl.

tcl hat einen netten C ++ - Wrapper (der auf boost.python basiert), der es einfach macht, Callbacks zu Ihrem Code aufzurufen und zu verkabeln

    
___ answer3780670 ___

Lua funktioniert auch ziemlich gut, vor allem, weil es klein ist, ansi c-konform ist, einen niedrigen Speicher-Footprint zusammen mit einer tollen Wiki- und Messaging-Liste hat. Wenn Sie noch mehr Geschwindigkeit benötigen, gibt es eine x86 32 und 64 bit jit Version (luajit). Das Binden kann mit einem Array von Werkzeugen / Bibliotheken wie swig oder lunar erfolgen (das Wiki listet sie alle auf). Das einzige Problem, das ich sehen kann, ist das Binden der Struktur-Mitglieder, so dass sie direkt referenziert werden können (zB: struct.member = 4), obwohl es möglich ist, dies mit Metatabellen einzurichten, die get- und set-Methoden an Variablennamen gebunden haben >     

___ answer3781157 ___

Für etwas so einfaches wie Sie beschreiben, könnten Sie einen Interpreter für Ihre eigene "kleine Sprache" implementieren. Man könnte es sogar "Robin" nennen. ; -)

    
___ answer3780753 ___

Sie sagen, dass Sie nicht nach etwas suchen, um Ihre C ++ Funktionen / Klassen in eine Python-Schnittstelle zu packen, aber wenn Sie wollen, dass Python-Code auf Mitglieder Ihrer C ++ %code% -Struktur verweisen kann, umschließt C ++ - Klassen in einer Python-Schnittstelle. Natürlich können Sie beliebig viele oder beliebig viele Klassen umbrechen - in diesem Beispiel würden Sie %code% umbrechen, dann würden Sie bette einen Python-Interpreter ein um Sachen mit %code% zu machen.

    
___ answer3780470 ___

Wenn Sie einfach Python-Skripte von C / C ++ ausführen möchten, verwenden Sie die Python-C-API . In Ihrem C / C ++ Code:

%Vor%

Für kompliziertere Dinge müssen Sie sich die API-Dokumentation ansehen, aber es ist ziemlich einfach.

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer3781199 ___

Ich rate mit Lua als interne Scripting-Engine. Implementierung ist nur ein paar Zeilen, und obwohl leicht, hat die Sprache genügend Kraft. Also keine Notwendigkeit für TCL. Sie können sich auch Python ansehen, die Integration in C ++ ist ziemlich einfach, da es ein Boost.Python Implementierung erleichtert die Integration.

Aber je nach Anwendung würde ich Lua immer noch empfehlen.

    
___ tag123embedding ___ Eine Einbettung ist eine Instanz einer Struktur, die in einer anderen Instanz enthalten ist, z. B. eine Gruppe, die eine Untergruppe ist. ___ tag123scripting ___ Scripting ist eine Form der Programmierung, die im Allgemeinen durch geringe Formalität, lose Typisierung und keine explizite Kompilierung gekennzeichnet ist. Es gibt zahlreiche Skriptsprachen, die in einer Vielzahl von Szenarien verwendet werden - Befehlszeilenanwendungen, GUIs, serverseitige Anwendungen, Erweiterungsmodule. ___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ qstntxt ___

Ich bin wirklich neu in C ++ und bin auf ein Problem gestoßen, das ich durch das Lesen von Dokumentationen nicht lösen konnte.

Ich möchte eine Skriptsprache in meine C ++ - Anwendung einbetten. Diese Sprache könnte Javascript, Lua oder vorzugsweise Python sein.

Ich bin nicht auf der Suche nach etwas wie Boost.Python / swig, etwas, das in der Lage ist, meine C ++ - Funktionen / -Klassen in eine Python-Schnittstelle einzubinden, sondern eher eine %code% -Funktion.

Ich habe eine ganze Reihe von Strukturen, die ein paar ganze Zahlen enthalten:

%Vor%

Nun möchte ich etwas Mathematik mit diesen ganzen Zahlen machen, zum Beispiel:

%Vor%

Die Mathematik, die ich machen möchte, wird sich in der Zukunft stark verändern und ich brauche andere Leute, die anders als ich in der Lage sind, die Mathematik zu ändern, ohne Zugriff auf den C ++ - Code zu haben.

Ich denke über eine Code-Struktur wie folgt nach:

  1. Ich initialisiere meine Struktur und fülle sie mit den Startwerten
  2. Ich lade eine externe Python-Funktion, sagen wir "my_python_function", die die Struktur als Argument annimmt und damit vor der Rückgabe rechnet.
  3. Ich bekomme meine Struktur wie %code%

Ist so etwas möglich? Ich habe viel gegoogelt, aber das einzige, was ich zu finden scheint, sind Wrapper, die c ++ - & gt; Python (oder andersherum) Funktionalität, ohne wirklich mit Variablen zu interagieren.

Ich wäre wirklich dankbar für jede Hilfe,
Robin.

    
___

8

Ich bin wirklich neu in C ++ und bin auf ein Problem gestoßen, das ich durch das Lesen von Dokumentationen nicht lösen konnte.

Ich möchte eine Skriptsprache in meine C ++ - Anwendung einbetten. Diese Sprache könnte Javascript, Lua oder vorzugsweise Python sein.

Ich bin nicht auf der Suche nach etwas wie Boost.Python / swig, etwas, das in der Lage ist, meine C ++ - Funktionen / -Klassen in eine Python-Schnittstelle einzubinden, sondern eher eine python_evaluate_and_return_result_as_variable("my_code"); -Funktion.

Ich habe eine ganze Reihe von Strukturen, die ein paar ganze Zahlen enthalten:

%Vor%

Nun möchte ich etwas Mathematik mit diesen ganzen Zahlen machen, zum Beispiel:

%Vor%

Die Mathematik, die ich machen möchte, wird sich in der Zukunft stark verändern und ich brauche andere Leute, die anders als ich in der Lage sind, die Mathematik zu ändern, ohne Zugriff auf den C ++ - Code zu haben.

Ich denke über eine Code-Struktur wie folgt nach:

  1. Ich initialisiere meine Struktur und fülle sie mit den Startwerten
  2. Ich lade eine externe Python-Funktion, sagen wir "my_python_function", die die Struktur als Argument annimmt und damit vor der Rückgabe rechnet.
  3. Ich bekomme meine Struktur wie i = my_python_function_cppwrapper(i)

Ist so etwas möglich? Ich habe viel gegoogelt, aber das einzige, was ich zu finden scheint, sind Wrapper, die c ++ - & gt; Python (oder andersherum) Funktionalität, ohne wirklich mit Variablen zu interagieren.

Ich wäre wirklich dankbar für jede Hilfe,
Robin.

    
Robin 23.09.2010, 16:17
quelle

9 Antworten

8

Warum nicht Boost.Python? Sie können Ihre Datenklassen Python aussetzen und ein Skript / eine Funktion ausführen, wie in hier .

    
David Feurle 23.09.2010, 16:37
quelle
8

Die Python-Dokumentation enthält eine Seite zum Einbetten von Python in eine C- oder C ++ - Anwendung.

    
Jon Purdy 23.09.2010 16:25
quelle
6

Wenn Sie einfach Python-Skripte von C / C ++ ausführen möchten, verwenden Sie die Python-C-API . In Ihrem C / C ++ Code:

%Vor%

Für kompliziertere Dinge müssen Sie sich die API-Dokumentation ansehen, aber es ist ziemlich einfach.

    
Ross Light 23.09.2010 16:25
quelle
2

Wie wäre es mit einer JavaScript-Engine wie V8 ?

?     
Matthijs Bierman 23.09.2010 16:21
quelle
1

Vergessen Sie nicht den Grand-Daddy der eingebetteten Skriptsprache - tcl.

tcl hat einen netten C ++ - Wrapper (der auf boost.python basiert), der es einfach macht, Callbacks zu Ihrem Code aufzurufen und zu verkabeln

    
pm100 23.09.2010 16:44
quelle
1

Lua funktioniert auch ziemlich gut, vor allem, weil es klein ist, ansi c-konform ist, einen niedrigen Speicher-Footprint zusammen mit einer tollen Wiki- und Messaging-Liste hat. Wenn Sie noch mehr Geschwindigkeit benötigen, gibt es eine x86 32 und 64 bit jit Version (luajit). Das Binden kann mit einem Array von Werkzeugen / Bibliotheken wie swig oder lunar erfolgen (das Wiki listet sie alle auf). Das einzige Problem, das ich sehen kann, ist das Binden der Struktur-Mitglieder, so dass sie direkt referenziert werden können (zB: struct.member = 4), obwohl es möglich ist, dies mit Metatabellen einzurichten, die get- und set-Methoden an Variablennamen gebunden haben >     

Necrolis 23.09.2010 16:48
quelle
1

Sie sagen, dass Sie nicht nach etwas suchen, um Ihre C ++ Funktionen / Klassen in eine Python-Schnittstelle zu packen, aber wenn Sie wollen, dass Python-Code auf Mitglieder Ihrer C ++ my_integers -Struktur verweisen kann, umschließt C ++ - Klassen in einer Python-Schnittstelle. Natürlich können Sie beliebig viele oder beliebig viele Klassen umbrechen - in diesem Beispiel würden Sie my_integers umbrechen, dann würden Sie bette einen Python-Interpreter ein um Sachen mit my_integers zu machen.

    
Josh Kelley 23.09.2010 17:00
quelle
1

Für etwas so einfaches wie Sie beschreiben, könnten Sie einen Interpreter für Ihre eigene "kleine Sprache" implementieren. Man könnte es sogar "Robin" nennen. ; -)

    
martineau 23.09.2010 17:50
quelle
1

Ich rate mit Lua als interne Scripting-Engine. Implementierung ist nur ein paar Zeilen, und obwohl leicht, hat die Sprache genügend Kraft. Also keine Notwendigkeit für TCL. Sie können sich auch Python ansehen, die Integration in C ++ ist ziemlich einfach, da es ein Boost.Python Implementierung erleichtert die Integration.

Aber je nach Anwendung würde ich Lua immer noch empfehlen.

    
polemon 23.09.2010 17:56
quelle

Tags und Links