Je dois concevoir un cadre qui calcule le résultat d'un algorithme diviser-et-conquérir en parallèle. Pour utiliser ce cadre, l'utilisateur doit spécifier d'une manière ou d'une autre la procédure qui implémente la phase "divide" (une fonction de T à T), la phase "conquer" (une fonction de D à D) et T et D eux-mêmes.
J'ai pensé qu'il serait bien de définir deux classes abstraites, BaseDivide
y BaseConquer
qui déclare une méthode virtuelle pure compute
avec les bons types : de cette façon, j'ai un type qui met en œuvre un concept bien défini (du point de vue du cadre) avec la fonction définissable par l'utilisateur incluse au moyen de la dérivation des classes abstraites.
J'ai pensé à utiliser des modèles pour transmettre les types au framework, afin que l'utilisateur n'ait pas à les instancier pour utiliser le framework, quelque chose comme ça :
template <typename T, typename D, typename Divide, typename Conquer>
D compute(T arg);
Mon problème est que je veux que Diviser et Conquérir soient des types dérivés de BaseDivide
y BaseConquer
Il existe un moyen de le faire respecter au moment de la compilation. De plus : pensez-vous que je puisse obtenir un résultat similaire avec une conception plus propre ?