Exposer classe C++ dans Lua
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:
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:
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:
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:
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:
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 |