Plop,

Cela fait bientôt quelques heures que je m'arrache les cheveux à la recherche d'informations sur comment exposer une instance de classe c++ dans une script lua et pas moyen de trouver.
Je sais comment exposer une fonction statique, permettre au script Lua de construire une class c++ mais pas ce que je veux.

Ce que j'aimerais faire exactement c'est accèder une instance de LuaClass de façon globale depuis le script lua.
Le but c'est d'avoir quelque chose dans le genre bien que je ne soit pas sur de la syntaxe.

Merci d'avance,
Je rajoute quand même mon code au cas ou.

main.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# include "LuaScript.hpp"
# include "LuaClass.hpp"
 
int	main(int ac, char **av)
{
  (void)ac;
  (void)av;
  LuaScript   Test;
  LuaClass    Plop("Debug");
 
  Test.loadFile("files/test.lua");
  Test.call();
  return 0;
}
LuaScript.cpp
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "LuaScript.hpp"
 
LuaScript::LuaScript()
{
  _state = luaL_newstate();
  luaL_openlibs(_state);
}
 
LuaScript::~LuaScript()
{
}
 
bool LuaScript::loadFile(std::string param)
{
  if (luaL_loadfile(_state, param.c_str()) != LUA_OK)
  {
    LuaError();
    return false;
  } else
    return true;
}
 
void LuaScript::call()
{
  if (lua_pcall(_state, 0, LUA_MULTRET, 0) != LUA_OK)
    LuaError();
}
 
void LuaScript::LuaError() const
{
  const char *message = lua_tostring(_state, -1);
  std::cout << message << std::endl;
  lua_pop(_state, 1);
}
LuaScript.hpp
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
16
17
18
19
20
21
22
23
24
25
26
#ifndef LUA_LOADER_LUASCRIPT_HPP
#define LUA_LOADER_LUASCRIPT_HPP
 
# include       <lua5.2/lua.hpp>
# include       <string>
# include       <iostream>
 
class LuaScript
{
private:
  lua_State *_state;
 
public:
  LuaScript();
 
  ~LuaScript();
 
  bool loadFile(std::string);
 
  void  call();
 
  void LuaError() const;
 
};
 
#endif //LUA_LOADER_LUASCRIPT_HPP
LuaClass.cpp
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
#include "LuaClass.hpp"
 
LuaClass::LuaClass(std::string value)
{
  _value = value;
}
 
LuaClass::~LuaClass()
{
}
 
void LuaClass::debug() const
{
  std::cout << "Test : " << _value << std::endl;
}
LuaClass.hpp
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
16
17
18
#ifndef LUA_LOADER_LUACLASS_HPP
#define LUA_LOADER_LUACLASS_HPP
 
# include   <iostream>
 
class LuaClass
{
private:
  std::string _value;
public:
  LuaClass(std::string);
 
  ~LuaClass();
 
  void debug() const;
};
 
#endif //LUA_LOADER_LUACLASS_HPP