VII. Pointeurs sur fonctions▲
Si on se réfère à la définition des objets utilisée dans ce texte, les fonctions ne sont pas des objets. Par contre, il est possible de stocker les informations nécessaires à l'activation d'une fonction dans un objet appelé pointeur sur fonction. Le terme pointeur est utilisé ici dans un sens étendu par rapport à celui utilisé précédemment dans ce texte (puisqu'il ne contient pas l'adresse d'un objet), mais justifié par le fait que la syntaxe utilisée est analogue à celle des adresses d'objets.
Les pointeurs sur fonctions sont fréquemment utilisés pour passer une fonction comme argument d'une autre fonction. Cette dernière est alors souvent un cadre général de résolution d'une classe de problèmes et ceci permet d'ajuster son comportement à un problème précis (cas typique : la fonction standard de tri qsort).
On rencontre aussi ces objets associés en tableau. Une telle structure peut éviter alors un switch ou une collection de if imbriqués en les remplaçant par une simple indexation dans le tableau et facilite ainsi la maintenance du programme.
Le type Tf « fonction retournant un typeT et ayant des arguments de typesT1, T2… », s'écrira en accord avec la déclaration des fonctions :
T Tf ( T1, T2, …) |
Pour écrire un type Taf « adresse d'une fonction retournant un type T et ayant des arguments de types T1, T2… », on écrira donc qu'à l'adresse de type Taf , (*Taf), on a une fonction :
T (*Taf ) ( T1, T2, …) |
exemple Sélectionnez
|
On remarquera, sur l'exemple ci-dessus, que l'identificateur de la fonction (sin) est assimilé à un pointeur sur la fonction double sin(double)