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

Registering a class' function in LuaBridge, then calling it via a lua script?

本文关键字:然后 lua 脚本 调用 函数 注册 LuaBridge 一个      更新时间:2023-10-16

每当我运行程序时,它都不会向控制台打印任何内容。如果我不使用类,只在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.loa"

我试过

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!")

有三个选项可以执行您想要的操作:

  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")

请注意调用中.:之间的差异。CCD_ 11像静态一样访问,CCD_。