Frage

Ich arbeite an einem C ++ Projekt mit einer großen Anzahl von Klassen (150+), von denen jedem überall 10-300 Feldern hat oder so. Ich würde wirklich in der Lage sein mag für Testzwecke eine Scripting-Schnittstelle zur Verfügung zu stellen, so dass ich Rückrufe codieren kann, das jede erneute Kompilierung nicht benötigen. Ich möchte dies in Lua zu tun, da ich besser vertraut mit seiner C-API bin, als ich mit Python bin, aber wenn es Kopfschmerzen sparen würde ich gerne in Python tun.

Ich habe ein solides Verständnis habe, wie Lua Funktionen von meiner C ++ und vice versa nennen, und ich weiß, wie Arten grundlegende Daten zurück zu passieren und her. Die Frage, die ich habe, ist, wie vom Benutzer angegebenen Datentypen zwischen den beiden mit SWIG teilen.

Zum Beispiel an einem gewissen Punkt in meiner C ++, ich könnte ein paar Stücke von Mitgliederdaten in einem Objekt bewerten will, die 250 Felder. Ich möchte in der Lage sein, dieses Objekt zu übergeben zu Lua was könnte dann (hoffentlich?) Verwenden, um den erzeugten SWIG-Wrapper um das Objekt zu manipulieren, zeigt bestimmte Felder, und dann die (möglicherweise geändert) passieren zu C-Objekt zurück ++ für die weitere Nutzung .

Ich würde auch eine Instanz des Objekts in Lua zu können, wie instanziiert die Wrapper verwenden und es zu C ++ abgehen als normale C ++ Version des Objekts verwendet werden.

Ist das möglich? Könnte jemand mich zu einem Tutorial zeigen oder ein explizites Beispiel?

Vielen Dank für jede Hilfe, die Sie anbieten können!

War es hilfreich?

Lösung

Solange Sie Ihre benutzerdefinierte wickeln Typen Swig-Schnittstellen (siehe hier Dokumentation über Swig-Lua API), sollte die Interaktion nahtlos. Der zur Verfügung gestellte Swig-Wrapper ermöglicht es Ihnen, neue Objekte zu instanziieren, übergeben sie an zu C ++ und umgekehrt.

Ich glaube nicht, dass Swig-Lua Verpackung noch Direktor Klassen unterstützt, was bedeutet, dass die bestehenden Klassen erstrecken, instanziieren sie und Weitergabe an C ++ zurück ist nicht möglich. Direktoren sind für Sprachen wie Python, Java, C #, obwohl unterstützt.

Andere Tipps

Wenn swig Sie Probleme gibt, habe ich mit der neuesten Version von tolua viel Glück hatte ++, die für den alleinigen Zweck ist C der Bindung ++ und Lua. Es erfordert eine modifizierte .h-Datei als Eingabe, die ein bisschen langweilig, aber nicht mehr, als Swig der Module. Ich habe keinen Grund, einen über den anderen zu bevorzugen, aber es ist gut über beide zu kennen.

Sie sollten auch Luabind überprüfen. Dieser setzt OOP für Lua und können Klassen und Datentypen von Lua zurück zu C ++ abzubilden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top