bonjour
Je cherche à faire en sorte d'avoir une instance d'une classe qui ait un 'clone' en lua, c'est à dire que je puisse toujours récupérer une certaine table en lua, et appeler des fonctions sur celle-ci, j'm'explique:
Voilà une table en lua, qui possède une certaine fonction :
Code :
- lua_table = {};
- function lua_table:fonction()
- print("tralala" );
- end
|
Et une certaine class en CPP :
Code :
- lua_table = {};
- function lua_table:fonction()
- print("tralala" );
- end
- class UneClasse
- {
- private:
- lua_table * table;
- public:
- void fonction()
- {
- // et la je pourrais appeller la fonction 'function' de mon 'lua_table' en utilisant le pointer 'table'
- }
- };
|
Je vois à peut près comment faire ça dans ce cas, mais le truc c'est que j'utilise un pseudo system de class en lua, et je peux créer de nouvelles classes via lua en faisant
Code :
- function class_ctor(self,var)
- self.a = var;
- end
- uneClass = class(class_ctor,'uneClass');
- function uneClass:fonction()
- print(self.a);
- end
|
Et je peux créer une instance de la class en faisant comme ceci :
Code :
- uneInstance = uneClass(120);
- uneInstance:fonction() -- Là j'imprime la variable 'a' de mon instance, qui est 120.
|
Du coups, je voudrais que ma classe CPP puisse avoir un pointeur sur la table de retours lorsque j'appelle 'uneClass(120)' par exemple.
J'espère que vous avez compris c'que j'ai fait, j'm'exprime pas forcément bien
Merci à vous
edit : J'ai peut être plus ou moins réussi, à un détail près :
J'ai ajouté au code source de lua une fonction lua_pushtable :
Code :
- LUA_API void lua_pushtable(lua_State * L, void*ptr) {
- lua_lock(L);
- sethvalue(L,L->top,ptr);
- api_incr_top(L);
- lua_unlock(L);
- }
|
Voilà comment je procède dans mon programme par la suite :
Code :
- lua_getglobal(L,"Inst" );
- const void*ptr = lua_topointer(L,-1);
- lua_pop(L,1);
- lua_pushtable(L,(void*)ptr);
- lua_getfield(L,-1,"show" );
- if (lua_isfunction(L,-1))
- {
-
- lua_call(L,0,0);
- }
|
Donc il récupère bien la table 'Inst', la stock dans le pointeur et appelle la fonction show, le soucis c'est que show est définie comme ceci en lua :
Code :
- function Inst:show()
- print(self.name);
- end
|
Du coups, en lua pour appeller cette fonction je suis supposé écrire 'Inst:show()', mais le lua_call que je fais en CPP correspond à 'Inst.show()', je perd donc le précieux self.. Comment je peux remédier à ça ?
Message édité par Terminapor le 22-02-2012 à 16:53:27
---------------
Perhaps you don't deserve to breathe