Bonjour, j'ai une question sur les bonnes pratiques du C++ !
Soit la classe "Parent", dont hérite la classe "Enfant".
J'ai besoin de passer un pointeur de méthode de la classe Enfant en paramètre, là ou un pointeur de méthode de la classe Parent est attendu, ce qui ne compile pas car les deux types sont différents.
(Le principe de substitution ne s'applique pas sur les pointeurs de méthodes).
Il n'est donc pas possible de faire :
L'appel à la fonction f provoque l'erreur de compilation, le type de la méthode n'est pas bon.
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 class Parent { }; class Enfant: public Parent { public: void methode(int) { } }; void f(void (Parent::*callback)(int)) { } int main() { f(&Enfant::methode); }
Pour contourner le problème, je caste :
Est-il correct de caster, il n'y a pas de risque à l'exécution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int main() { typedef void (Parent::*HACK)(int); f((HACK) &Enfant::methode); }
Existe-t-il une solution plus élégante ?
Merci.
Partager