gpt4 book ai didi

c++ - 相同用户数据的 Lua 数组和面向对象访问

转载 作者:太空宇宙 更新时间:2023-11-04 12:55:28 26 4
gpt4 key购买 nike

我有一个用 C++ 编写的 CArray 类,并作为数组公开给 Lua。

1) 创建一个新的用户数据:

int Array_new(lua_State* L)
{
int len = luaL_checkint(L, 1);
CArray<std::string> **Arr = (CArray<std::string>**)lua_newuserdata(L, sizeof(CArray<std::string>*));
*Arr = new CArray<std::string>(len);
luaL_getmetatable(L, "ArrayMetatable");
lua_setmetatable(L, -2);

return 1;
}

2) 访问一个元素:

int Array_getValue(lua_State* L)
{
CArray<std::string>* arr = *(CArray<std::string>**)lua_touserdata(L, 1);
int pos=luaL_checknumber(L, 2)-1;

//Omitted for brevity
lua_pushstring(L, stdStr.c_str());

return 1;
}

3)注册到Lua:

int luaopen_Array(lua_State* L)
{
luaL_newmetatable(L, "ArrayMetatable"); // metatable1

luaL_setfuncs(L, Array_metatable, 0);
lua_pushstring(L, "__index");
lua_pushvalue(L, -2); // metatable1 __index metatable1
lua_settable(L, -3); // metatable1[__index]=metatable1

/*luaL_newmetatable(L, "ArrayMetatable_2"); // metatable1 metatable2
lua_pushstring(L, "__index"); // metatable1 metatable2 __index
lua_pushstring(L, "get"); // metatable1 metatable2 __index get
lua_gettable(L, 1); // metatable1 metatable2 __index
lua_settable(L, 2);

lua_pushvalue(L, 1); //metatable1 metatable2 metatable1*/

lua_setglobal(L, "Array");

return 0;
}

问题是我必须选择 Lua 代码来访问数组中的元素:a) arr:get(1)获取第一个元素,b) arr[1]得到第一个元素。

但是 ab 不能同时工作,所以我必须更喜欢 style astyle b 。修改第3步是否可以同时做ab

到目前为止,如果我尝试使用 arr[2] 等 Lua 表达式,我提供的代码会在第 2 步 出现错误这样变量 arr的地址是0xcccccc。

最佳答案

可以添加一个__index方法和一个get方法,分开添加即可。

关于c++ - 相同用户数据的 Lua 数组和面向对象访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46870449/

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