Xcode и qmake .pro файл

Не существует специальной функции для запроса модулей Lua из C-API. [1] Поэтому я ориентировался на функцию dolibrary в интерпретаторе Lua для реализации require, которая просто вызывает функцию Lua require из C.

NB: Я не рекомендую общаться с модулями путем обмена глобальными переменными, особенно когда порядок загрузки модулей имеет значение, как здесь. Лучше предоставить методы A.update_num(old) и B.update_num(old), которые берут старое значение num в качестве аргумента и возвращают обновленное значение.

#include 

#include 

int require(lua_State *L, char const * modname) {
    int const size = lua_gettop(L);

    lua_getglobal(L, "require");
    lua_pushstring(L, modname);

    if (lua_pcall(L, 1, LUA_MULTRET, 0) != 0) {
        std::cerr << "lua:" << lua_tostring(L, 1) << '\n';
        lua_pop(L,1);
        return 0; // Failed, nothing should be on the stack
    }

    return lua_gettop(L) - size;
}

int main() {
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);

    require(L, "A");
    require(L, "B");

    lua_close(L);
}

С помощью скриптов из вашего вопроса в том же каталоге мы получаем :

$ clang++ -Wall -Wextra -Wpedantic -I /usr/include/lua5.2/ test.cpp -llua5.2
$ ./a.out 
5

[1] Для использования модулей Lua C из C-API существует lua_requiref .

0
задан G-Virus 19 January 2019 в 11:36
поделиться