gpt4 book ai didi

c++ - 使用 LUAPlus 将 Lua 表函数绑定(bind)到 C++ 变量

转载 作者:行者123 更新时间:2023-11-30 03:53:58 26 4
gpt4 key购买 nike

我想使用 LUAPlus 将 Lua 表函数链接到 C++ 变量。到目前为止,使用我可以在网上找到的信息,我已经设法使用 DoString("tableName:functionName") 调用了一个表函数,但我希望能够通过多变的。我知道这是可能的,但我不知道我做错了什么。

在我添加的代码中,pLuaState->DoString("table1:prints()") 工作正常并根据需要打印所有内容。当我尝试获取该函数并使用 func 变量调用它时,我的程序崩溃并显示

错误信息

Assertion failed: 0, file .../luafunciton.h, line 41

如果我删除 Lua 中 prints() 函数中的所有打印,除了“print(”in prints”)”,一切正常。基于此,我假设 GetByName("functionName") 返回一个不包含对其父表的引用的函数。这就是我卡住的地方。

main.cpp

pLuaState = LuaPlus::LuaState::Create(true);
pLuaState->DoFile("test.lua");
LuaObject globals = pLuaState->GetGlobals();

LuaObject metaTableObj = pLuaState->GetGlobals().Lookup("RandomMove");
if (metaTableObj.IsNil())
{
metaTableObj = pLuaState->GetGlobals().CreateTable("RandomMove");
}
metaTableObj.SetObject("__index", metaTableObj);
metaTableObj.RegisterObjectDirect("GetX", (TestLua*)0, &TestLua::GetX);
metaTableObj.RegisterObjectDirect("SetX", (TestLua*)0, &TestLua::SetX);

TestLua obj1(6);
LuaObject table1Obj = pLuaState->GetGlobals().CreateTable("table1");
table1Obj.SetLightUserData("__object", &obj1);
table1Obj.SetObject("__index", metaTableObj);
table1Obj.SetMetaTable(metaTableObj);
pLuaState->DoString("table1:prints()");

auto prints = table1Obj.GetByName("prints");
if (!prints.IsFunction())
cout << "nil function" << endl;
else
{
LuaPlus::LuaFunction<void> func(prints);
func();
}

test.lua

print("test.lua")

RandomMove =
{
_thing = 1
}

function RandomMove:SetThing()
print("I am "..tostring(self.__object))
end

function RandomMove:prints()
print("in prints")
print("__object is: " .. tostring(self.__object))
print("_thing is: ".. tostring(self._thing))
print(self:GetX())
end

如有任何帮助,我们将不胜感激。

最佳答案

你是对的。函数对他们的“ parent ”或他们的“对象”或任何东西一无所知。这就是 : 调用语法存在的原因。调用 table1:prints()table1.prints(table1) 相同(只有 lua 确保 table1 只计算一次。

因此,如果您从表/等中获取函数。直接当你直接调用它时,你需要确保你传递了正确的表/等。作为第一个参数(在函数期望的任何其他参数之前)。

关于c++ - 使用 LUAPlus 将 Lua 表函数绑定(bind)到 C++ 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29821704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com