Зарегистрировать функцию класса в 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!")

0

Решение

Есть три варианта сделать то, что вы хотите:

  1. Если вы хотите построить myClass экземпляр в lua, и используйте его как ваш первый пример, вам также нужно экспортировать конструктор после beginClass:

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

  2. Построить myClass экземпляр в C ++, а затем передать его в lua, используя другую функцию. Тогда Луа может получить к нему доступ, например:

    myClassInstance:printMessage("Hello")

  3. Делать printMessage статический и экспортируйте его следующим образом:

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

    Затем вы можете позвонить в Луа, используя:

    myClass.printMessage("Hello")

Обратите внимание на разницу между . а также : в звонках. . доступы как статические и : доступ как экземпляр.

0

Другие решения


По вопросам рекламы [email protected]