Foncteur + Template + héritage
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:
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 !