Я работаю над небольшим проектом, пытающимся интегрировать 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
и т. Д., Но я хотел бы иметь возможность вызывать s1.lua setVars () и s2.lua setVars () после простой загрузки обоих в ряд.