IはCで次の簡単なコードを有する++オブジェクトは、STDの容器である:C++/Lua FFIを使用して、ユーザーデータをテーブルとして表示しますか?
local obj = create_an_object()
print(obj.foo) -- 123
一方print(obj)
示す:上記FFIと
static int create_an_object(lua_State* L) {
auto obj = static_cast<Object*>(lua_newuserdata(L, sizeof(Object*)));
*obj = another_valid_obj;
luaL_newmetatable(L, "object_metatable");
lua_pushcfunction(L, object_metatable_function);
lua_setfield(L, -2, "__index");
lua_pop(L, 1);
return 1;
}
static int object_metatable_function(lua_State* L) {
string index = luaL_checkstring(L, -1);
if (index == "foo") {
lua_pushnumber(L, 123);
}
// Handles other indices, or throws error.
}
lua_pushcfunction(L, create_an_object);
lua_setglobal(L, "create_an_object");
、IのようなLuaのオブジェクトの索引付けを達成することができますそのobjはuserdata: 0x12345678
です。
obj
をテーブルとして使用できるように、一部のメタメソッドMagicを使用できますか?print(obj.foo)
はまだ123を出力しますか?私はLua 5.1で自分のコードを実行しています。
私は、このユーザーデータの索引、ipair/pair繰り返しとgetlen(#)を含む操作をサポートしたいと考えています。 – TangKe
これを実現するには、 '__pairs' /' __ipairs'メタメソッド(Lua 5.2+)と['__len'メタメソッド(https://www.lua.org/manual/5.2/manual.html#3.4.6) 。 –
ええ、私はそれが5.2+で実行可能であることを知っていますが、私は5.1しか使用できません:( – TangKe