Вопрос

У меня есть функции, вложенные относительно глубоко в набор таблиц.Есть ли в C/C++ способ получить «ссылку» на эту функцию и поместить ее (и аргументы) в стек, когда мне нужно ее использовать?

Это было полезно?

Решение

Именно для этого предназначена справочная система . Вызов функции r = luaL_ref (L, LUA_REGISTRYINDEX) сохраняет значение в верхней части стека в реестре и возвращает целое число, которое можно сохранить на стороне C и использовать для извлечения значения с помощью вызов функции lua_rawgeti (L, LUA_REGISTRYINDEX, r) .

См. главу PiL , а также документацию по luaL_ref () , lua_rawgeti () и luaL_unref () для полной истории.

Другие советы

API Луа (http://www.lua.org/manual/5.1/manual.html#3) можно использовать для доступа к любым элементам таблицы, которые вы хотите.Используйте lua_gettable(), чтобы извлечь элемент таблицы и поместить его в стек Lua. Если этот элемент также является таблицей, просто вызовите lua_gettable() еще раз, чтобы получить доступ к этой таблице, и так далее...

(В зависимости от того, что вы делаете, lua_rawget() может быть лучшим выбором, чем lua_gettable() )

Дополнительно в ответ на комментарий:

Хорошо, это немного интереснее.Ну, таблица — это ссылочный объект (в большей или меньшей степени), поэтому вам, вероятно, будет безопасно сохранить где-нибудь самую внутреннюю ссылку на таблицу.

Поскольку API lua, похоже, не имеет возможности напрямую манипулировать ссылками на таблицы, вам, вероятно, придется поместить ссылку в глобальную таблицу, или, если это не работает, новую таблицу с одной записью таблицы.Если вам понадобится ссылка позже, просто получите ее из глобального каталога.

например

// Final table reference is now at top of stack, after multiple dereferences
lua_setglobal( L, "mytableref" );
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top