Les pointeurs de fonction fournissent un moyen de faire référence à des fonctions de l'opérateur. Cependant, pour les opérateurs standards intégrés, cette approche peut ne pas être simple. Cet article examine les raisons de cette limitation et explore des solutions alternatives pour obtenir des fonctionnalités similaires.
Selon la norme C (13.6/ 1), les opérateurs intégrés ne sont pas des fonctions d'opérateur normales et ne peuvent donc pas avoir de pointeurs de fonction pointant vers eux. Ils participent uniquement à la résolution des surcharges sans servir à aucun autre objectif.
Pour surmonter cette limitation, le standard C introduit des objets de fonction, qui fournissent une fonctionnalité analogue aux objets de fonction intégrés. opérateurs via des objets modélisés. Par exemple, pour les comparaisons, des objets fonction comme égal_to, supérieur et less_equal sont définis. Ces objets peuvent être utilisés comme arguments de pointeur de fonction.
Dans l'extrait de code fourni, l'objectif est de comparer deux entiers au sein d'une classe de modèle. En utilisant la technique des objets fonction, cela peut être réalisé comme suit :
<code class="cpp">class MyAction { bool operator()() { if (fnCompare_(arg0_, arg1_)) { // do this } else { // do s.th. else } } };</code>
Ici, fnCompare_ peut être un objet fonction comme std::equal_to
En plus des objets de fonction, les opérateurs de bibliothèque standard peuvent également être utilisés comme pointeurs de fonction. Cependant, l'instance respective du modèle doit être référencée. Par exemple :
<code class="cpp">std::basic_string<char> a("test"), b("test2"); std::cout << test_function<std::basic_string<char>>(a, b, &std::operator+);</code>
Bien que les pointeurs de fonction ne soient pas directement disponibles pour les opérateurs standard intégrés, les solutions alternatives fournies par les objets fonction et les opérateurs de type classe standard permettent des fonctionnalités équivalentes. Ces alternatives permettent d'utiliser des opérateurs standard spécifiques comme pointeurs de fonction, répondant ainsi à la limitation présentée par les opérateurs intégrés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!