Опираясь на ответ Хавьера, у Lua есть специальная универсально доступная таблица, называемая реестром, доступная через C API с помощью псевдоиндекса LUA_REGISTRYINDEX
. Вы можете использовать функцию luaL_ref
для хранения любого значения Lua в реестре, которое вам нравится (включая функции Lua), и получить обратно целое число, которое можно использовать для ссылки на него из C:
// Assumes that the function you want to store is on the top of stack L
int function_index = luaL_ref(L, LUA_REGISTRYINDEX);