Переопределение привязки функции общего класса для использования в обратных вызовах - PullRequest
0 голосов
/ 11 мая 2018

У меня есть программа, которая создает грубые типы, которые будут переопределены другой библиотекой. Например, базовый класс с именем ScriptEng, который переопределяется библиотекой для реализации сценариев; Например Луа.

Итак, эта библиотека создает тип с именем LuaScriptEng из ScriptEng.

Во время выполнения вызывается библиотека и создается указатель на этот тип.

ScriptEng* script = LoadClassFromLibrary("LuaScriptEng.dll","LuaScriptEng");

Или

ScriptEng* script = LoadClassFromLibrary("SqurrelScript.dll","SqurrelScriptEng");

Проблема возникает, когда я пытаюсь передать другие методы класса этому экземпляру для воздействия на этот встроенный язык.

Game* game = new Game(); //contains stuff.
auto game_bind = script->createClass<Game>("Game", game);
game_bind->bindMethod("helo", &Game::hello);

Это работает хорошо до тех пор, пока мне не придется переопределять методы класса в классе LuaScriptEng.

class ScriptEng
{
public:
    ScriptEng();
    template<class T>
    ScriptClass<T>* createClass(const std::string& name,T* cla)
    {
        //Implement per engine information here in children
        return new ScriptClass<T>(cla);
    }
    virtual bool callFunction(const std::string& name)
    {
        return true;
    }
    virtual ~ScriptEng();
};

Поскольку в этом смысле невозможно иметь «виртуальную» функцию шаблона.

Я не могу обойтись без этого, если, конечно, я не создаю десятки статических функций и вместо того, чтобы связывать класс по частям, я использую их вместо этого.

Я пытаюсь представить функции для языка сценариев, чтобы было проще понять типы вызовов, такие как

Game.somefunction(); //From lua or some other lang, call the current instance of this function.

Теперь идея обходного пути, которая у меня есть, вероятно, сработает, но она действительно грязная.

Из того, что я прочитал, оберточные обобщения в этом случае были бы "Стирание типа", но при этом я смотрю где-то рядом с 5-9 вызовами функций на один вызов скрипта, которые ДЕЙСТВИТЕЛЬНО приводят к остановке программы.

Что может быть лучше, чем это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...