Я только что скачал LuaBridge сегодня и очень доволен этим до сих пор. Одна вещь, которую я заметил, это то, что я могу обойти обычное требование наличия lua_State в качестве параметра функции.
Я могу сделать это:
//C++ files
void love(int i) {std::cout << i;}
luabridge::getGlobalNamespace(lua)
.addFunction("love", love);
-- Lua file
love(8)
и это будет работать просто отлично, но если я сделаю что-нибудь с эффектом:
//C++ files
struct Tester {
int number;
void MemFunction (int i) { std::cout << i;}
static void Register(lua_State*);
};
void Tester::Register(lua_State *lua) {
luabridge::getGlobalNamespace(lua)
.beginClass<Tester>("Tester")
.addConstructor <void (*) (void)> ()
.addData("number", &Tester::number)
.addFunction("MemFunction", &Tester::MemFunction)
.endClass();
}
--Lua file
c = Tester() -- works...
c.number = 1 -- works...
c.MemFunction(10) -- nothing!
Ничто из того, что я прочитал в документации, не указывает на то, что функции-члены с аргументами не-lua_State не могут быть зарегистрированы, и я видел, как некоторый код LuaBridge делает это без проблем. Что я здесь не так делаю?
Вы должны использовать синтаксис вызова метода
c:MemFunction(10)
Я бы предложил вам использовать более новая версия от GitHub, который имеет обширную документацию. Это также обеспечивает дополнительную гибкость в отношении входных параметров и возвращаемых значений.
Других решений пока нет …