gpt4 book ai didi

c++ - LuaBind:如何将类的特定实例绑定(bind)到 Lua?

转载 作者:可可西里 更新时间:2023-11-01 16:29:22 26 4
gpt4 key购买 nike

(旁注:这是游戏编程)

使用 LuaBind 将整个类绑定(bind)到 Lua 很容易:

class test
{
test()
{
std::cout<<"constructed!"<<std::endl;
}

void print()
{
std::cout<<"works!"<<std::endl;
}
}

//其他地方

   module[some_lua_state]
[
class_<test>("test")
.def(constructor<>())
.def("print",&test::print)
];

现在我可以在 Lua 中创建类的实例并使用它:

lua_example.lua

foo = test() //will print "constructed!" on the console
foo:print() //will print "works!" on the console

但是,现在我想将一个特定的测试实例绑定(bind)到 Lua。这将使我能够将对象传递给 Lua,例如Player 类的一个实例并执行如下操作:

Player:SetPosition(200,300)

相对于走艰难的道路并拥有类似的东西

SetPosition("Player",200,300)

相应的 C++ SetPosition 函数需要查找 std::map 以找到播放器。

这甚至可能吗?如果可以,我如何在 LuaBind 中做到这一点?

最佳答案

您不会将类的实例绑定(bind)到 Lua。类的实例只是数据,您可以通过通常的方式将数据传递给 Lua。 C++ 对象虽然很特殊;因为它们是通过 Luabind 注册的,所以您必须使用 Luabind 方法将它们提供给 Lua 脚本。

有几种方法可以将数据提供给 Lua,而 Luabind 涵盖了所有这些方法。例如,如果您有一个对象 x , 这是指向类 X 的指针在 Luabind 注册,有几种方法可以给 Lua x .

您可以设置 x 的值成一个全局变量。这是通过 Luabind 的 object 完成的。接口(interface)和 globals功能:

luabind::globals(L)["NameOfVariable"] = x;

显然,您可以将它放在另一个表中,该表位于另一个表中,等等,可以从全局状态访问。但是您需要确保所有表格都存在。

将此数据传递给 Lua 的另一种方法是调用 Lua 函数并将其作为参数传递。您可以使用 luabind::object接口(interface)获取函数作为对象,然后使用luabind::call_function调用它。然后你可以通过 x作为函数的参数。或者,如果您更喜欢 lua_pcall -style 语法,可以换行 xluabind::object并用 luabind::object::push 将其压入栈中.

关于c++ - LuaBind:如何将类的特定实例绑定(bind)到 Lua?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483809/

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