Мне нужно спроектировать структуру, которая вычисляет результат алгоритма «разделяй и властвуй» параллельно.Чтобы использовать структуру, пользователь должен каким-то образом указать процедуру, которая реализует фазу «деления» (функция от T до T), фазу «завоевания» (функцию от D до D) и сами T и D.
Я подумал, что было бы неплохо определить два абстрактных класса, BaseDivide
и BaseConquer
, которые объявляют чистый виртуальный метод compute
с правильными типами: таким образом, у меня есть тип, который реализуетчетко определенная концепция (с точки зрения фреймворка) с определяемой пользователем функцией, включенной посредством деривации абстрактных классов.
Я думал использовать шаблоны для передачи типов вфреймворк, поэтому пользователю не нужно создавать их экземпляры для использования фреймворка, вот что-то вроде этого:
template <typename T, typename D, typename Divide, typename Conquer>
D compute(T arg);
Моя проблема в том, что я хочу, чтобы Divide и Conquer были производными типами BaseDivide
и BaseConquer
: есть способ применить его во время компиляции?Кроме того: как вы думаете, я могу достичь аналогичного результата с более чистым дизайном?