Je tente de comparer l'adresse de deux fonctions pour l'égalité. Le type de ma fonction stockée est connu. Ce système fonctionne normalement, considérez le code suivant (écrit échantillon non du programme):Conversion du pointeur de fonction de classe en void * ou vice versa
virtual bool compare(void *fn2) {
void (*fn)(int);
if(fn==fn2)
return true;
}
Toutefois, lorsque les fonctions de classe sont entrées en considération la même méthode ne fonctionne pas.
virtual bool compare(void *fn2) {
void(__thiscall myclass::*fn)(int);
void *fn2;
if(fn==fn2) //error C2440 type cast: cannot convert void* to void(__thiscall...
return true;
}
Ces fonctions remplacent une fonction virtuelle pure de classe de base commune similaire à ce qui suit:
virtual bool compare(void*) = 0;
Puisque je ne peux pas utiliser le modèle <> dans des fonctions virtuelles, je suis d'options. Existe-t-il un moyen (de toute façon) d'unifier les fonctions de classe et les fonctions régulières?
Merci à l'avance, Cem
Vous ne pouvez pas convertir des pointeurs de fonction ou des pointeurs de fonction membres en pointeurs vides ("pointeurs vers des objets") sans réinterprétation définie par l'implémentation, ce qui signifie que nous avons besoin de beaucoup plus de détails. –
La question qui vient à l'esprit est de savoir quel est le véritable cas d'utilisation qui motive cette nécessité. Je peux imaginer qu'il pourrait y avoir différentes conceptions pour résoudre le même problème qui peut réellement être implémenté dans la langue. –
@David: En d'autres termes, il pose des questions sur la tentative de solution [plutôt que le problème] (http://tinyurl.com/meta-xy). –