Bonsoir !

Je dispose d'une classe de caméra qui peut mettre à jour la position de la camera de trois manières différentes, selon le type de caméra choisie. J'ai pensé au début à faire trois if :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
if (typeCamera1)
{
//
}
else if (typeCamera2)
{
//
}
else
{
//
}
Toutefois ces fonctions étant assez longues, cela m'aurait fait une fonction UpdatePosition() très très longue. J'ai donc pensé à faire un pointeur de fonction qui appelerait automatiquement la bonne fonction.

Voici donc la signature de cette fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
boost::function<void ()> updatePositionFunction;
(variable membre privée)

Dans le constructeur de la classe, j'attribue la fonction par défaut :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
updatePositionFunction = boost::bind(&Camera::UpdatePositionFPS, this);
Tout ce code compile correctement, le problème arrive avec la fonction UpdatePosition, qui doit appeler donc la bonne fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
void UpdatePosition ()
{
   updatePositionFunction; // Compile, mais n'appelle pas la fonction   UpdatePositionFPS
 
   updatePositionFunction(); // Compile, mais crash dès le début de l'application
}
D'autre part, est-il possible de traduire ce code sans utiliser boost (qu'avec la STL), tout en gardant une syntaxe pas trop dégueue ?