Методы интерфейса, которые должны принимать неоднозначные аргументы?

Не был уверен, как правильно сформулировать проблему для названия поста. Вот проблема, с которой я сталкиваюсь. У нас есть интерфейс, который будет реализован нашими LuaStateManager класс для регистрации функций в LuaPlus::LuaState, Проблема в том, что эти функции могут иметь любую подпись.

LuaPlus позволяет зарегистрировать любую функцию с ее LuaObject::RegisterDirect метод. Это можно сделать, потому что он использует шаблоны. Тем не менее, мы должны заключить в капсулу LuaState в интерфейсе, который имеет чисто виртуальные функции.

Поэтому наша идея заключалась в том, чтобы иметь функцию, которая LuaStateManager будет реализовывать:

IScriptState::RegisterFunction( /* What should go here? */ )

Однако, как вы, вероятно, видите, нет способа указать, какой тип аргумента должен быть передан этой функции, поскольку это может быть любая сигнатура функции. Мы не можем использовать шаблоны, как LuaPlus, потому что виртуальные функции не могут быть шаблонизированы. Мы не можем шаблонировать весь LuaStateManager класс или IScriptState интерфейс либо потому, что для каждого переданного типа функции он будет генерировать совершенно новое состояние сценария, и ни одна из функций не будет находиться вместе.

Как такие проблемы решались в прошлом? В настоящее время мы используем метод грубой силы, который просто создает все наши экспорты в структуре, которую пользователи могут получить и заполнить. Таким образом, они будут знать, какой язык сценариев они используют, и смогут напрямую использовать LuaStateManager вместо IScriptState интерфейс, но это совершенно неаккуратное решение.

3

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]