Ceci est lié à la génération de code.Comment faire passer un pointeur de fonction à une fonction de membre surchargée en tant que paramètre
I ont une classe A
qui est généré à partir du modèle, dans lequel j'ai deux surcharges de fonction f
comme ci-dessous:
class A
{
public:
void f(int a){}
void f(int a, int b){}
}
I ont alors une partie distincte du système qui ne sont pas générées à partir du modèle, mais écrit en C++. Ici, je voudrais accéder à la fonction f
sur un objet. À partir du modèle, je peux transmettre des données à la partie du système fabriquée à la main, mais pas l'inverse, puisque le fichier généré n'est pas disponible pour la compilation lorsque je construis mon code artisanal.
Mon idée est de passer un pointeur de fonction du modèle à l'endroit où j'en ai besoin. Ceci, comme je l'ai compris jusqu'à présent, inclut static_cast
pour résoudre le problème de surcharge et ensuite je peux passer un pointeur sur la fonction en tant que paramètre à une autre fonction fabriquée à la main.
La fonction utilisée pour passer le pointeur sur la partie fabriqués à la main du système est déclaré comme celui-ci (ici A
est inconnue):
void passPointer(int, void (*f)(int, int));
Mon appel en fonte et la fonction ressemble:
handCraftedObject->passPointer(17, static_cast<void (A::*)(int, int)> (&A::f));
Mon erreur de compilation est:
: no known conversion for argument 2 from 'void (A::*)(int, int)' to 'void (*)(int, int)
J'espère que cela ne me pas un je dois connaître la classe A
où la fonction passant le pointeur de fonction est déclarée. Ce n'est pas possible dans mon système.
Le pointeur de fonction n'est pas identique au pointeur (fonction), le second a besoin d'une instance de classe. – Jarod42
La méthode 'A :: f' doit devenir statique, ou vous devez changer la signature ... – Jarod42