在LuaBridge中注册类的函数,然后通过lua脚本调用它?

每次运行程序时,控制台都不打印任何内容。如果我不使用类,而只是在main()中完成所有操作,那么这将很好。

一旦我将它放入类中,就会出现问题。我做错了什么?

using namespace luabridge;

myClass::myClass()
{
    lua_State* L = luaL_newstate();
    luaL_openlibs(L);
    getGlobalNamespace(L).beginClass<myClass>("myClass").addFunction("printMessage", &myClass::printMessage).endClass();
    luaL_dofile(L, "test.lua");
    lua_pcall(L, 0, 0, 0);
}

void myClass::printMessage(const std::string& s)
{
    std::cout << s << std::endl;
}

我的lua脚本“test.lua”

我尝试了

c = myClass()
c:printMessage("You can call C++ functions from Lua!")

myClass:printMessage("You can call C++ functions from Lua!")

printMessage("You can call C++ functions from Lua!")
点赞
用户4060007
用户4060007

有三种选项可以满足你的需求:

  1. 如果你想在lua中创建一个 myClass 实例,并且像第一个例子一样使用它,你需要在 beginClass 之后导出构造函数:

    .addConstructor <void (*) (void)> ()

  2. 在C++中构造 myClass 实例,然后使用其他函数将其传递给lua。之后lua可以像下面这样使用它:

    myClassInstance:printMessage("Hello")

  3. printMessage 设为静态函数,并按照以下方式导出:

    .addStaticFunction("printMessage", &myClass::printMessage)

    然后你可以在lua中使用以下语句调用它:

    myClass.printMessage("Hello")

请注意,在调用中 .: 的区别。. 类似于静态访问,而 : 类似于实例访问。

2014-10-06 17:33:57