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

时间:2014-10-06 09:37:48

标签: c++ class lua luabridge

每当我运行程序时,它都不会向控制台打印任何内容。 如果我不使用类并在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脚本&#34; test.lua&#34;

我已经尝试了

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 个答案:

答案 0 :(得分:0)

有三种选择可以做你想做的事:

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

  4. 请注意调用中.:之间的区别。 .访问类似静态和:访问,如实例。