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)