Comment faire pour utiliser des pointeurs de fonction en C ++

Un pointeur de fonction est, en substance, juste un pointeur vers une fonction. Dans les langages tels que C ++, chaque fonction et variable dans un programme d'ordinateur existe comme une adresse de mémoire, et une variable peuvent contenir la valeur de cette adresse. Cette variable peut être transmise à un rappel, qui peut alors appeler la fonction que les points variables à. Il peut également être utilisé dans un gestionnaire d'événement, ou pour une liaison tardive d'une fonction de membre. En raison de leur syntaxe compliquée, les pointeurs de fonction sont souvent évités par les programmeurs, mais peuvent être utilisés pour accomplir facilement plusieurs tâches puissantes.

Instructions

1 Ecrire un programme C ++. Ceci est le programme dans lequel vous allez utiliser un pointeur de fonction.

2 Définir un pointeur de fonction. Vous pouvez le faire de plusieurs façons. Déclarer une fonction, telle que:

void doSomething (int données)
ALLER

et de déclarer plus tard, un pointeur vers elle. Ou, vous pouvez déclarer une fonction comme un pointeur:

void (* doSomething) (int)
ALLER

Enfin, vous pouvez déclarer un typedef, puis créer une variable de ce type.

typedef void (* voidTakingInt) (int)
ALLER

Vous pouvez maintenant utiliser \ "voidTakingInt \" comme un type:

void doSomething (int données)
ALLER
voidTakingInt fun_ptr = & doSomething;

3 Déclarer quelque chose qui utilise la fonction pointeur. Ce sera souvent quelque chose qui utilise la fonction pointeur comme une fonction de rappel, de sorte que lorsqu'un événement spécifique se produit, la fonction exécute votre fonction. Un exemple est une fonction fichier de chargement qui prend une fonction de rappel pour indiquer la progression.

4 Appelez la fonction du pointeur vers elle. Cela serait fait à partir de la fonction que vous avez écrit qui accepte un pointeur de fonction en tant que paramètre:

void doSomething (int data) {
}

callAnotherFunction void (void (* otherFunction) (int)) {

(* OtherFunction) (3)
ALLER

}

int main (int argc, char * argv []) {

callAnotherFunction (& doSomething)
ALLER
return 0
ALLER

}

Conseils et avertissements

  • Dans la programmation orientée objet, les fonctions sont souvent membres d'une certaine classe. fonctions membres non statiques ne peuvent pas être transmises en tant que pointeurs de fonction. Une pratique courante consiste à faire passer à la place un pointeur vers un objet qui peut alors appeler la fonction membre nécessaire. Une autre façon est de créer une fonction membre statique qui prend comme paramètre de données, qui serait utilisé pour transmettre une instance du type d'objet. Cela pourrait alors appeler la fonction de membre approprié. Par exemple:
  • // Ceci a été déclaré comme statique dans la spécification MyClass
  • MyClass vides :: callAnotherFunction (vides de données *) {
  • MyClass * instance = (MyClass *) (données)
  • ALLER
  • intance-> doSomething ()
  • ALLER
  • }