Вы можете обойти ограничение, сохранив активный указатель this
в статической переменной.Это создает проблему невозможности одновременной работы двух этих классов, но это работает.
static CScript* luaThis; // This is a private variable inside CScript.
Затем внутри вашего CScript
конструктора (или какой-то функции 'activate'), вы можете просто указать:
luaThis = this;
Затем, когда ваши статические функции вызываются (они могут даже быть частными функциями, если они зарегистрированы внутри класса), у вас есть доступ ко всей информации вашего члена черезluaThis
указатель.
lua_pushinteger(L, luaThis->App->SetDisplayMode(width, height, depth));
Проблема, как я уже сказал, заключается в том, что это ограничивает вас одним активным CScript за раз (поскольку другой обратный вызов из другого состояния Lua будет использовать luaThis
, пока он указываетк неправильным вещам).Если вам когда-либо понадобится несколько активных экземпляров, вы можете придумать какой-нибудь механизм поиска, использующий входящий lua_State*
в качестве ключа.
std::map<lua_State*, CScript*> lookups; // Just an idea, if it comes to this.
Надеюсь, это поможет!