
Envoyé par
Kaluza
Ok, dans ce cas, quelle syntaxe serait correcte ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| double Ncomputation::calc(unsigned int axis) const
{
// Initialization
double result=0.;
double (Ncomputation::*f)(double,double,double)const=&Ncomputation::f220;
// Select the function
switch(axis)
{
case 1 : f=&Ncomputation::f022; break;
case 2 : f=&Ncomputation::f202; break;
case 3 : f=&Ncomputation::f220; break;
default : f=&Ncomputation::f220;
}
// (Ici j'utilise f pour calculer le résultat)
(this->*f)(1.,2.,3.);
// (Ici j'utilise f pour calculer le résultat)
// Return
return result;
} |

Envoyé par
Kaluza
J'ai lu que les foncteurs étaient bien plus rapides dans la plupart des cas

L'avantage des foncteurs c'est qu'en étant plus générique ils facilitent l'évolution.
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
|
stuct Ncomputation
{
/* [...] */
template<class foncteur_t_>
double calcul_effectif(foncteur_t_ f_)const
{
return f_(1.,2.,3.);
}
double Ncomputation::calc(unsigned int axis) const
{
// Initialization
double result=0.;
double (Ncomputation::*f)(double,double,double)const=&Ncomputation::f220;
// Select the function
switch(axis)
{
case 1 : f=&Ncomputation::f022; break;
case 2 : f=&Ncomputation::f202; break;
case 3 : f=&Ncomputation::f220; break;
default : f=&Ncomputation::f220;
}
return calcul_effectif(boost::bind(f,this,_1,_2,_3));
} |
Puis un beau jour, apparait :
double new_function(double,double,double);
Peu de code à modifier :
1 2 3 4 5 6
| Ncomputation a;
a.calc(1);
a.calc(2);
a.calc(3);
a.calc(17);
a.calcul_effectif(new_function);// Ca marche avec une nouvelle fonction !! |
Partager