2009-12-11 5 views
9

C++ je par exemple, une table Lua/objet:Appel de fonctions dans une table Lua de

bannana 

Et cette table Lua a une fonction à l'intérieur appelé chew, qui prend un paramètre

bannana.chew(5) 

J'ai aussi utilisé SWIG, et ont par exemple une classe CPerson:

class CPerson { 
    public: 
     // .... 
     void Eat(); 
     // .... 
}; 

je peux obtenir une instance de cet objet de Lua:

person = engine:getPerson() 

Ce que je dois être en mesure de faire est le code Lua suivant:

person = engine:getPerson() 
person:Eat(bannana) 

person:eat appelleraient la fonction chew dans la bannana en passant un paramètre.

Depuis CPerson est implémenté en C++, quels changements sont nécessaires pour mettre en œuvre Eat() avec la classe CPerson dispose déjà d'un pointeur d'état Lua?

Edit1: Je ne veux pas savoir comment lier des classes C++ à Lua, je l'ai déjà SWIG de le faire pour moi, je veux savoir comment appeler les fonctions Lua dans les tables Lua, de C++.

Edit2: La classe CPerson et bannana table, sont les deux exemples généraux, on peut supposer que la classe CPerson a déjà un pointeur LuaState/référence, et que la signature de la fonction de la méthode Eat peut être modifié par le personne répondant.

Répondre

10

Ignorant toute erreur de vérification ...

lua_getglobal(L, "banana"); // or get 'banana' from person:Eat() 
lua_getfield(L, -1, "chew"); 
lua_pushinteger(L, 5); 
lua_pcall(L, 1, 0, 0); 
-1

Peut-être que "Simpler Cpp Binding" vous sera utile.

+0

ceci ne me aide, tout cela me dit est comment passer littéraux, comment lier C++ pour Lua avec luna, et comment passer des objets C++ autour avec lua . –

+0

Ce que j'ai demandé, c'est comment appeler une méthode sur une table lua de C++, j'ai déjà SWIG pour lier C++ à lua pour moi –

+0

quelle est la signature exacte de la méthode Eater de CPerson (générée par SWIG, je suppose?) D'après ce que je sous-entends, ce que vous voulez, c'est que la classe CPerson obtienne la table 'bannana' lua, n'est-ce pas? Je pense que pour cela vous devez obtenir un gestionnaire sur le luaState correspondant ... – phtrivier

Questions connexes