Я работаю над небольшим проектом, пытаясь интегрировать lua с C ++. Однако моя проблема заключается в следующем:
У меня есть несколько скриптов lua, назовем их s1.lua, s2.lua и s3.lua. Каждый из них имеет следующие функции: setVars () и executeResults ().
Теперь я могу вызвать файл lua через LuaL_dofile и сразу после использования setVars () и / или executeResults (). Однако проблема здесь в том, что после загрузки s2.lua я больше не могу вызывать функции s1.lua. Это означало бы, что мне нужно переделать LuaL_dofile на s1.lua, чтобы восстановить доступ к функции, и при этом я потеряю доступ к функциям в s2.lua.
Есть ли способ просто загрузить все файлы lua подряд, а затем начать вызывать их функции по желанию? Что-то вроде s1-> executeResults () s5-> executeResults () s3-> setVars () и т. Д.
В настоящее время у меня уже есть система, использующая boost :: filesystem для обнаружения всех файлов lua в папке, затем я сохраняю имена этих файлов в векторе, а затем просто перебираю вектор, чтобы загрузить каждый файл lua в строке.
За исключением заполнения вектора именами файлов lua, моя функция загрузки плагина на данный момент выглядит так:
void Lua_plugin::load_Plugins(){
std::vector<std::string>::const_iterator it;
for (it=Lua_PluginList.begin(); it!=Lua_PluginList.end(); it++){
std::cout<<"File loading: " << *it << std::endl;
std::string filename = *it;
std::string filepath = scriptdir+filename;
if (luaL_loadfile(L, filepath.c_str()) || lua_pcall(L, 0, 0, 0)) {
std::cout << "ScriptEngine: error loading script. Error returned was: " << lua_tostring(L, -1) << std::endl;
}
}
}
Чтобы было немного понятнее, все, что у меня есть в .lua, это что-то вроде этого:
-- s1.lua
setVars()
--do stuff
end
executeResults()
--dostuff
end
и т.д., но я хотел бы иметь возможность вызывать setVars () s1.lua и setVars () s2.lua после простой загрузки обоих подряд.