Bonjour tout le monde,

Voici mon problème : j'ai une classe A qui définie une méthode MA faisant appel a une méthode virtuelle pure MVP et la classe B qui hérite de A et qui donc implémente la MVP : précision les classe A et B sont des classes Template.
Jusque la pas de problème, ça marche.

Maintenant, j'ai besoin de changer le comportement de MVP : j'ai ajouté donc plusieurs MVP définies dans A et implémentées dans B. En fonction d'un paramètre de MA je choisi de faire telle ou telle MVP : j'ai donc un gros switch en plein milieu de la fonction MA pour choisir la bonne MVP : la solution les foncteurs bien sur !

Sauf que je n'y arrive pas du tout : mon gros problème c'est que je n'arrive pas a déclarer un foncteur vers une MVP template de la classe A, faut il le faire "a l’intérieur" de la classe, ou l’extérieur ?

Voila ou j'en suis en plus simplifié :

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
34
35
36
37
38
39
40
 
template <typename T>
class A
{
public:
 
    typedef T (A::*InterpolationFunc)(float, float, float); // declaration qui ne marche pas
 
    void MA(InterpoaltionType type)
    {
        InterpolationFunc interpFunc = selectInterpoaltion(type); // choix de la bonne fonction d'interpolation
 
        // appel de interpFunc dans une boucle
    }
 
    InterpolationFunc selectInterpoaltion(type)
   {
        switch(type)
        {
         case 1 : return &A::interpolation1;
         case 2 : return &A::interpolation2;
         ...
         case N : return &A::interpolationN;
        }
   }
 
    virtual void T interpolation1(float, float, float) = 0;
    virtual void T interpolation2(float, float, float) = 0;
    ...
    virtual void T interpolationN(float, float, float) = 0;
};
 
template <typename T>
class B : public A<T>
{
    void T interpolation1(float, float, float) { ... }
    void T interpolation2(float, float, float) { ... }
    ...
    void T interpolationN(float, float, float) { ... }
};
J’espère que j'ai était assez clair,
Merci d'avance pour le coup de main !