gpt4 book ai didi

c++ - 在 Lua 中注册非静态 C++ 方法

转载 作者:太空狗 更新时间:2023-10-29 21:06:37 25 4
gpt4 key购买 nike

我正在尝试制作一个小型 C++/Lua 系统,我将在其中创建我的对象并在 Lua 中将行为附加到它们。现在我正在使用 LuaWrapper(一个带有基本 C++ 到 Lua 东西的小头文件),我的问题是据我所知,Lua 只让我注册静态类方法(或非静态函数),一些研究和我这是因为 Lua typedef 需要一个只有一个参数的方法 lua_State* L 而非静态方法有隐式的 this

我希望找到一种不依赖于其他库的方法来解决这个问题,我所需要的只是 Lua 中的非静态类/属性,所以我认为没有理由使用 LuaBind+Boost 或其他高度依赖的包装器。

最佳答案

LuaWrapper 并不意味着直接连接到类中的非静态函数。我想它可能有一些特殊的技巧,但我是这样设计它的:

static int Widget_AddChild(lua_State* L)
{
Widget* parent = luaW_check<Widget>(L, 1);
Widget* child = luaW_check<Widget>(L, 2);
if (parent && child)
{
lua_pushboolean(L, parent->AddChild(child));
return 1;
}
return 0;
}

// ...

static luaL_reg Widget_metatable[] =
{
{ "AddChild", Widget_Addchild },
// ...
{ NULL, NULL }
};

我通常将非 lua 的东西放在一个单独的文件中。在本例中为 Widget.cpp/hpp。然后我有一个 LuaWidget 文件,其中只包含我根据需要编写的绑定(bind)。 (我还有一些 snipmate 片段可以让编写这些函数变得快速而轻松。如果您使用的是 vim,我很乐意分享它们)

关于c++ - 在 Lua 中注册非静态 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7365570/

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