Quel point commun doivent avoir les fonctions qui peuvent être
désignées par un même pointeur sur fonctions ?
Elles doivent avoir le même prototype (seuls les noms diffèrent).
(voir
cette section)
Déclarer une variable
fp qui soit un pointeur sur des fonctions
attendant un entier et un réel et ne renvoyant aucun résultat.
Cette variable ne devra désigner aucune fonction au moment de son
initialisation.
Déclarer une variable
fp qui soit un pointeur sur des fonctions
traitant de réels en double précision.
Cette variable devra désigner initialement la fonction mathématique
standard dédiée au calcul de
cosinus.
Inventer un type nommé
MathFnct qui corresponde à un pointeur sur
des fonctions mathématiques traitant de réels en double-précision.
Déclarer une fonction
apply() dont le rôle est de transformer tous les
éléments d'un tableau d'entiers passé par ses paramètres.
La transformation à appliquer sera indiquée à la fonction
apply() à
l'aide d'un paramètre de type pointeur sur fonctions attendant un entier
et renvoyant un autre entier.
Par quel moyen peut on faire en sorte qu'un algorithme générique
puisse invoquer un traitement qui ait accès à des données
applicatives quelconques ?
Décrire
toutes les étapes cruciales du procédé.
- L'algorithme générique doit recevoir, en plus du pointeur sur
fonctions, un pointeur de type void *.
- Le pointeur sur fonctions doit attendre un tel paramètre de type
void * car l'algorithme générique lui transmettra aveuglément
celui qu'il aura reçu.
- La fonction désignée par le pointeur sur fonctions doit convertir le
pointeur de type void * reçu vers le type de pointeur qui
correspond exactement à la donnée pointée dans le contexte appelant
lors de l'invocation de l'algorithme générique.
(voir
cette section)