Здравствуйте, у меня есть следующий фрагмент кода, который, кажется, работает, но я не уверен, почему - я построил тестовый класс следующим образом
class testclass {
int ivalue;
public:
int getivalue();
void setivalue(int &v);
};
, а затем зарегистрировал тестовый класс (биты пропущены)для реальных функций, но они довольно простые).Я не слежу за регистрацией метатаблиц.(etivalue и setivalue являются функциями c, которые вызывают функции классов с одинаковыми именами)
static const struct luaL_Reg arraylib_f [] = {
{"new", new_testclass},
{NULL, NULL}
};
static const struct luaL_Reg arraylib_m [] = {
{"set", setivalue},
{"get", getivalue},
{NULL, NULL}
};
int luaopen_testclass (lua_State *L) {
luaL_newmetatable(L, "LuaBook.testclass");
lua_pushvalue(L, -1); /* duplicates the metatable */
lua_setfield(L, -2, "__index");
luaL_register(L, NULL, arraylib_m);
luaL_register(L, "testclass", arraylib_f);
return 1;
}
Немного не понимаю, что я добавляю функции в __index для метатаблицы, но когда я запускаю
a = testclass.new()
a:set(10)
print(a:get())
Тогда все работает как положено.Но я не понимаю, почему этот набор вызывается, когда я думаю, что загрузил его в метатаблицу __index?Это то, что я сделал или что-то еще?
tia