Bonjour à tous,
Je bloque sur un problème qui me dépasse pour le moment ! Le voici : je dois faire une interface pour travailler avec des algorithmes ayant le même but, mais des interfaces et des méthodes très différentes.
J'ai décidé de faire une interface générale pour ces algorithmes avec une classe virtuelle pure à hériter pour chaque type d'algorithme.
Le problème de ces algorithmes est qu'ils ont chacun un panel de paramètres qui n'ont rien à voir les uns avec les autres selon le type de l'algorithme.
J'aimerai donc que dans l'interface générale je puisse proposer une fonction afin de modifier le paramètre d'un algorithme, et donc, que selon le type d'algorithme et de paramètre à changer, la valeur ait un type en adéquation.
J'ai donc, par exemple, pour un type d'algorithme concret, que nous appellerons SD, implémenté cette interface :
on a donc une énumération avec les différents paramètres d'un algorithme de type SD, et une structure SDParamType qui "renvoie" le type de chaque paramètre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #define BSPF_ALGORITHM_SIGMA_DELTA_SD_PARAMETERS_SD_PARAM_TYPE(PARAM,TYPE) \ template <> struct SDParamType<SDParameters::PARAM> { \ typedef TYPE Type;\ }; namespace BSPF_ALGORITHM { class SDParameters { public: enum ID { AMP_FACTOR, MAX_VARIANCE, MIN_VARIANCE }; }; template <SDParameters::ID T> struct SDParamType; BSPF_ALGORITHM_SIGMA_DELTA_SD_PARAMETERS_SD_PARAM_TYPE( AMP_FACTOR, uint32_t ) BSPF_ALGORITHM_SIGMA_DELTA_SD_PARAMETERS_SD_PARAM_TYPE( MAX_VARIANCE, uint32_t ) BSPF_ALGORITHM_SIGMA_DELTA_SD_PARAMETERS_SD_PARAM_TYPE( MIN_VARIANCE, uint32_t ) }
Voici l'interface générale que j'essaye d'implémenter :
Seulement, g++ renvoies l'erreur suivante (correspondant à la méthode setParameter) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 namespace BSPF_ALGORITHM { template <class Parameters, class ParamType> class Algorithm { public: template <typename T> Algorithm(BSPF_IMAGE::Image<T> image); virtual ~Algorithm(); template <typename Parameters::ID id> void setParameter(typename ParamType<id>::Type value); }; }
Si je transforme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Algorithm.h:16:34: erreur: expected nested-name-specifier before ParamType Algorithm.h:16:34: erreur: expected ( before ParamType Algorithm.h:16:59: erreur: variable or field setParameter declared void
en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template <typename Parameters::ID id> void setParameter(typename ParamType<id>::Type value);
évidemment ça compile, mais ça ne va pas. Je ne sais pas comment venir à bout de ce problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template <typename Parameters::ID id> void setParameter(typename ParamType::Type value);
Merci !
Benjamin
Partager