Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1629 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [CPP/Lua] Pointeur sur table

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[CPP/Lua] Pointeur sur table

n°2127819
Terminapor
I'll see you rise.
Posté le 22-02-2012 à 15:45:14  profilanswer
 

bonjour :hello:

 

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 :
  1. lua_table = {};
  2. function lua_table:fonction()
  3. print("tralala" );
  4. end
 

Et une certaine class en CPP :

 
Code :
  1. lua_table = {};
  2. function lua_table:fonction()
  3. print("tralala" );
  4. end
  5. class UneClasse
  6. {
  7. private:
  8.  lua_table  * table;
  9. public:
  10.  void fonction()
  11.  {
  12.   // et la je pourrais appeller la fonction 'function' de mon 'lua_table' en utilisant le pointer 'table'
  13.  }
  14. };
 

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 :
  1. function class_ctor(self,var)
  2.   self.a = var;
  3. end
  4. uneClass = class(class_ctor,'uneClass');
  5. function uneClass:fonction()
  6.   print(self.a);
  7. end
 

Et je peux créer une instance de la class en faisant comme ceci :

Code :
  1. uneInstance = uneClass(120);
  2. 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 :D

 

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 :
  1. LUA_API void lua_pushtable(lua_State * L, void*ptr) {
  2. lua_lock(L);
  3. sethvalue(L,L->top,ptr);
  4. api_incr_top(L);
  5. lua_unlock(L);
  6. }
 

Voilà comment je procède dans mon programme par la suite :

 
Code :
  1. lua_getglobal(L,"Inst" );
  2.     const void*ptr = lua_topointer(L,-1);
  3.     lua_pop(L,1);
  4.     lua_pushtable(L,(void*)ptr);
  5.     lua_getfield(L,-1,"show" );
  6.     if (lua_isfunction(L,-1))
  7.     {
  8.        
  9.         lua_call(L,0,0);
  10.     }
 

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 :
  1. function Inst:show()
  2.      print(self.name);
  3. 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
mood
Publicité
Posté le 22-02-2012 à 15:45:14  profilanswer
 

n°2127861
Terminapor
I'll see you rise.
Posté le 22-02-2012 à 20:50:37  profilanswer
 

Bon j'ai finalement réussi :D

Code :
  1. lua_getglobal(L,"Inst" );
  2.         const void*ptr = lua_topointer(L,-1);
  3.         lua_pop(L,1);
  4.         lua_pushtable(L,(void*)ptr);
  5.         lua_callmeta(L,1,"show" );
  6.         lua_pop(L,2);


 
Y'a peut être même pas besoin de pointeur, apparemment on peut utiliser un système de registre :)
 
Ciaossu !


---------------
Perhaps you don't deserve to breathe

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [CPP/Lua] Pointeur sur table

 

Sujets relatifs
déclarer un pointeur vers un tableau de tableaux ...?[MySQL] Mise à jour d'une colonne d'une table.
importer les dernieres données inseré dans une table[PostgreSQL] Primary key sur table temporaire?
Transferer données précises vers une autre table en fonction d'un ID[C#/C] Dllimport et pointeur de fonction
insertion dans une table selon des portionsTable sql
[mysql] table pour faire des statstable de connectivité
Plus de sujets relatifs à : [CPP/Lua] Pointeur sur table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR