Я пытаюсь добавить LUA API к моей программе на C ++ и пытаюсь разрешить сценарию рисовать на моем GUI. До сих пор у меня есть это для моей лямбда-функции:
auto addToDrawList = [](lua_State* L) -> int
{
int DrawType = (int)lua_tonumber(L, -2);
std::string Label = (std::string)lua_tostring(L, -1);
bool found = false;
for (int i = 0; i <= DrawList.size(); i++)
{
if (DrawList[i].Active == false && !found)
{
switch (DrawType)
{
case(0):
break;
case(1):
DrawList[i].Active = true;
DrawList[i].DrawType = Type::TextBox;
DrawList[i].Label = Label;
break;
}
found = true;
}
}
return 0;
};
Это как мой LUA выполняемый скрипт:
const char* LUA_FILE = R"(
addToDrawList(1, "Test")
)";
Вот как я толкаю свою функцию к LUA stack:
lua_State* L = luaL_newstate();
lua_newtable(L);
int uiTableInd = lua_gettop(L);
lua_pushvalue(L, uiTableInd);
lua_setglobal(L, "Ui");
lua_pushcfunction(L, addToDrawList);
lua_setfield(L, -2, "addToDrawList");
Проблема в моем первом скрипте, так как он не может получить массив DrawList, поскольку он находится внутри this
.
Итак, чтобы решить эту проблему, я попытался добавить this
в список захвата лямбды, выполнив следующее:
auto addToDrawList = [this](lua_State* L) -> int
, которое, как оказалось, работало и устранило ошибку, но затем у меня возникла проблема с последним сценарием:
lua_pushcfunction(L, addToDrawList);
Я искал в Inte rnet исправление, но не могу его найти.