Pointeur sur table [CPP/Lua] - C++ - Programmation
MarshPosté le 22-02-2012 à 15:45:14
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 :
Voilà comment je procède dans mon programme par la suite :
Code :
lua_getglobal(L,"Inst" );
constvoid*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
Marsh Posté le 22-02-2012 à 15:45:14
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 :
Et une certaine class en CPP :
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
Et je peux créer une instance de la class en faisant comme ceci :
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 :
Voilà comment je procède dans mon programme par la suite :
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 :
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