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