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, la norme 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 :
class MyAction {
bool operator()() {
if (fnCompare_(arg0_, arg1_)) {
// do this
} else {
// do s.th. else
}
}
};
Ici, fnCompare_ peut être un objet fonction comme std::equal_to
En plus des objets 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 :
std::basic_string a("test"), b("test2");
std::cout >(a, b, &std::operator );
Bien que les pointeurs de fonction ne soient pas directement disponibles pour les dans les opérateurs standard, 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 standards spécifiques comme pointeurs de fonction, répondant ainsi aux limitations présentées par les opérateurs intégrés.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3