Le plus pertinent serait que la fonction de comparaison retourne l'adresse de la donnée la plus petite, sans s'embêter à recopier la donnée.
Par exemple, lors de la comparaison de deux chaînes de caractères, la fonction retournerait l'adresse d'une des deux chaînes, sans recopier les caractères.
La réponse à la question 1 est alors :
typedef const void * (*GetMin)(const void * x, const void * y);
Si la fonction de comparaison devait copier la donnée la plus petite, alors la réponse à la question 1 serait :
typedef void (*CopyMin)(void* dest, const void * x, const void * y);
Mais cela aurait plusieurs inconvénients :
- La fonction cumulerait deux responsabilités qui ne sont pas liées : comparer et copier. Le code aurait été plus flexible s'il s'agissait de deux fonctions séparées.
- La fonction ne serait pas utilisable pour les données qu'on ne peut pas copier.
- La fonction ne serait pas performante pour les données dont la copie serait coûteuse et non nécessaire.
Partager