Bonjour,

Je découvre Lua et je l'intègre dans mon programme en C++. J'aimerais associer un objet àmoi, un contexte en fait, à chaque lua_State de manière à pouvoir utiliser cet objet dans mes fonctions "registrées".

J'ai d'abord pensé faire quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
map<lua_State*, MonContexte*> mapLuaContextes = ...;
 
// Init d'un plugin Lua
lua_State* L = lua_open();
lua_register(L, "my_function", my_function);
mapLuaContextes[L] = new MonContexte();
...
 
int my_function(lua_State *L) {
  if(lua_gettop(L) != 0)
    cerr << endl << "Erreur...";
  MonContexte monContexte = mapLuaContextes[L];
  monContexte->faitUnTruc()
  return 0;
}
Mais je pense qu'il serait plus propre d'injecter le pointeur de mon contexte dans le lua_State si c'est possible, par contre je ne veux pas que mon contexte soit disponible dans les scripts Lua.
J'ai vu qu'on peut utiliser un userdata mais j'ai l'impression qu'un userdata est exposé au script Lua.

Est-ce qu'il est possible de "cacher" une variable dans le contexte Lua ? Sinon, comment puis-je m'y prendre pour faire ça proprement svp ?

PS : N'ayant pas trouvé de vers de Lunar compatible Lua 5.2.0 j'utilise Lua 5.0.3.