Je travaille sur un projet C++ avec un grand nombre de classes (150+), chacune ayant entre 10 et 300 champs. J'aimerais vraiment être en mesure de fournir une interface de script à des fins de test afin que je puisse coder des rappels qui ne nécessitent aucune recompilation. J'aimerais le faire dans Lua car je connais mieux son API C que Python, mais si cela permet de sauver des maux de tête, je serais heureux de le faire en Python.Passer des variables entre C++ et Lua via Swig
J'ai une bonne compréhension de la façon d'appeler les fonctions Lua de mon C++ et vice versa, et je sais comment transmettre les types de données de base d'avant en arrière. La question que j'ai est de savoir comment partager les types de données spécifiées par l'utilisateur entre les deux en utilisant SWIG. Par exemple, à un moment donné dans mon C++, je pourrais vouloir évaluer quelques données de membre dans un objet qui a 250 champs. J'aimerais pouvoir remettre cet objet à Lua qui pourrait alors utiliser les wrappers SWIG générés pour manipuler cet objet, afficher certains champs, puis passer l'objet (potentiellement changé) à C++ pour une utilisation continue .
Je voudrais aussi pouvoir instancier une instance de l'objet dans Lua en utilisant les wrappers et le passer en C++ pour être utilisé comme une version C++ normale de l'objet.
Est-ce possible? Quelqu'un pourrait-il me diriger vers un tutoriel ou un exemple explicite?
Merci pour toute aide que vous pouvez offrir!
Très bien, merci pour le lien! Même aller seulement dans un sens est une grande aide. Même si je ne peux pas créer une nouvelle instance d'un objet dans Lua et la renvoyer en C++, savez-vous si je peux * modifier * un objet C++ existant qui a été transmis à Lua? C'est-à-dire, puis-je créer un objet C++, le passer à Lua, modifier quelques champs dans Lua, puis recommencer à l'utiliser en C++ avec les champs mis à jour? – zslayton
Oui, bien sûr. La modification de l'objet dans LUA (via l'interface fournie par SWIG) modifie réellement l'objet C++ sous-jacent. Tout est plutôt transparent. SWIG fait également du bon travail avec les fonctionnalités de langage telles que les tableaux, STL, les pointeurs, les fonctions de type usine et les interfaces de classe basées sur l'opérateur (y compris les pointeurs intelligents) – ASk