Так что после того, как я отложил мою библиотеку сценариев на некоторое время, я вернулся к ней свежим взглядом.И это работает.Теперь моя проблема - попытаться упаковать ее в абстрактную библиотеку.
Моя проблема заключается в моей реализации.Общая цель состоит в том, чтобы создать DLL для каждого механизма сценариев, который загружается и привязывается по мере необходимости для сценариев.
Прямо сейчас я могу предварительно выполнить:
SqurrelEnviroment* e = new Squrrelnviroment();
, который изменяется на:
ScriptEnviroment* e = loadFromDll("Squrrel.dll");
Это прекрасно работает. Теперь перед изменением я мог бы выполнить предварительную формулу:
SqurrelClass<MyClass>* myclass = e->bindClass<MyClass>("MyClass");
myclass->bindFunction(&MyClass::Foo,"foo");
scriptfile.nut
local temp = MyClass();
temp.foo();
Внутри это сложное связывание таблиц и другиевызовы функций.Теперь, когда я преобразовываю это в базовый класс, проблемы начинают проявляться.Сначала я преформирую:
template<class T>
SqurrelClass<T>* SqurrelEnviroment::bindClass(const std::string& classname);
Но когда я преобразую это, чтобы использовать больше базовых классов, я начинаю работать с функциями виртуального шаблона.
template<class T>
ScriptClass<T>* ScriptEnviroment::bindClass(const std::string& classname) = 0;
То, что мне нравится напоминать в Интернете, невозможно.
Любой обходной путь, который я пробовал, не подходит для моей реализации.Я знаю о других обязательных утилитах для белка.Это должно быть более широким и принимать другие языки, используя стиль привязки данных «Таблица».
Что я пробовал:
- Установка в моем классе ScriptEnviroment внешних функций, которые являютсязатем определяется в новом SqurrelEnviroment.Работает, но только для одного языка.Если я загружаю другую DLL, у меня возникают проблемы.
- Использование: static_cast(* this) .template _method ();Также приводит к тем же проблемам.
- Наиболее распространенным способом решения этой проблемы является перемещение шаблона с уровня метода на уровень класса.Но это не сработает.
Так каковы альтернативы?Я надеюсь, что смогу использовать уже существующие утилиты привязки для каждого языка.Единственное решение, которое я могу придумать, - написать свою собственную утилиту привязки для каждого языка, которая полностью не соответствует цели.