gpt4 book ai didi

c++ - 如何绑定(bind) C++ 公共(public)变量以在 lua 脚本中访问

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:27 24 4
gpt4 key购买 nike

如何在 Lua 脚本中访问一个类中的变量。下面是一个例子:

// C++
struct HObject{
float x, y, z;
float sx, sy, sz;

void funcTest(void);
}

// Binding OBject
static bool checkFunctionArgs(lua_State* ls, const char* fname, unsigned int nargs)
{
// etc
}

HObject* HObject_check(lua_State* ls, int index)
{
// etc
}

static int HObject_newHObject(lua_State* ls)
{
// etc
}

static int HObject_destructor(lua_State* ls)
{
// etc
}

void HTest_register(lua_State* ls)
{
// etc
}

-- Lua script
local obj = HObject:new() -- Create instance
obj:funcTest() -- OK
obj.x = 10 -- How to bind?
io.write(obj.x) -- How to bind?

我已经链接了类的函数,缺少变量。

抱歉英语...

最佳答案

你想做的事情可以通过 PIL 中描述的用户数据机制来完成,从 http://www.lua.org/pil/28.html 开始。 .你已经知道了吗?你在 obj:FuncTest() 旁边写了“Okay”,就好像你已经让那部分工作了。

我将从那个页面给出一些很好的例子。他们描述了如何创建像这样的 C 结构

typedef struct NumArray {
int size;
double values[1]; /* variable part */
} NumArray;

然后通过在库中注册方法

static const struct luaL_reg arraylib [] = {
{"new", newarray},
{"set", setarray},
{"get", getarray},
{"size", getsize},
{NULL, NULL}
};

int luaopen_array (lua_State *L) {
luaL_openlib(L, "array", arraylib, 0);
return 1;
}

可以向用户数据添加数据和方法,并从 Lua 访问它们。下面是使用数组运算符 [],这需要做更多的工作,但他们展示了如何做。

a = array.new(1000)
a[10] = 3.4 -- setarray
print(a[10]) -- getarray --> 3.4

现在我不是肯定的,但我想由于用户数据是一个 C 结构,它不能有函数,而只有函数指针。因此,在 C 语言中,您可能必须将“a”的适当成员传递给函数。

关于c++ - 如何绑定(bind) C++ 公共(public)变量以在 lua 脚本中访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22723218/

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