Я столкнулся со следующей головоломкой: наше программное обеспечение имеет абстрактный базовый класс для объектов алгоритмов. Все эти объекты имеют общий метод execute()
, например:
class Algorithm
{
public:
// [...]
virtual void execute() = 0;
// [...]
};
Для каждого алгоритма, который мы хотим реализовать, мы просто наследуем от базового класса и сохраняем все загруженные объекты алгоритма в центральном расположении. Все идет нормально.
Теперь проблема заключается в параметрах алгоритма. Мы хотим иметь возможность описать для каждого алгоритма параметры, которые необходимо установить (внешним классом). С этой целью мы дали каждому алгоритму объект ParameterList
, который содержит его параметры.Я должен уточнить, что для нас параметр состоит из какого-то типа (например, int
) и метки (например, «Количество итераций»).
Теперь проблема начинается, когда мы хотим подключить ParameterList
в какой-то графический интерфейс. Очевидно, что наши алгоритмы не должны иметь «знаний» о графическом API (Qt, GTK и т. д.), который мы используем. Тем не менее, с той же стороны, мы хотим чтобы иметь возможность семантически описывать параметры алгоритма, например, указывая, что для алгоритма требуется имя файла.Как это имя файлабудет отображаться в дальнейшем, зависит от графического интерфейса пользователя.
Есть ли как совместить этот ParameterList
с каким-то знанием семантического типа?
Я понимаю, что этот вопрос звучит очень расплывчато. Тем не менее, мне не разрешено публиковать какие-либо нетривиальные примеры кода (по причинам NDA) Итак, сталкивался ли кто-нибудь с подобной проблемой в прошлом?
Подводя итог: мы хотим, чтобы наши объекты описывали параметры, зная точные детали графического интерфейса.