Maison >développement back-end >C++ >## Pouvez-vous obtenir des pointeurs de fonction pour les opérateurs C intégrés ?

## Pouvez-vous obtenir des pointeurs de fonction pour les opérateurs C intégrés ?

DDD
DDDoriginal
2024-10-25 10:20:30657parcourir

## Can You Get Function Pointers for Built-in C   Operators?

Est-il possible d'obtenir le pointeur de fonction d'un opérateur standard intégré ?

Introduction

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.

Pourquoi les pointeurs de fonction ne sont pas disponibles pour les opérateurs intégrés

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.

Alternative : utiliser des objets de fonction

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.

Exemple

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 pour effectuer la comparaison.

Opérateurs de type de classe standard

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>

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn