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 :

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);
}
L'appel à la fonction f provoque l'erreur de compilation, le type de la méthode n'est pas bon.
Pour contourner le problème, je caste :

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);
}
Est-il correct de caster, il n'y a pas de risque à l'exécution ?
Existe-t-il une solution plus élégante ?

Merci.