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 :
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.
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 { // }
Voici donc la signature de cette fonction :
(variable membre privée)
Code : Sélectionner tout - Visualiser dans une fenêtre à part boost::function<void ()> updatePositionFunction;
Dans le constructeur de la classe, j'attribue la fonction par défaut :
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 updatePositionFunction = boost::bind(&Camera::UpdatePositionFPS, this);
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 ?
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 }
Partager