Maison  >  Article  >  développement back-end  >  Pouvez-vous obtenir un pointeur de fonction vers un opérateur standard intégré en C ?

Pouvez-vous obtenir un pointeur de fonction vers un opérateur standard intégré en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-25 22:10:28105parcourir

Can you get a function pointer to a built-in standard operator in C  ?

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

Pourquoi les opérateurs intégrés ne le font-ils pas ? Je n'ai pas de pointeurs de fonction

C 11 définit les opérateurs intégrés dans [over.built] et précise que ces opérateurs participent à la résolution des surcharges mais ne servent à aucun autre but. En tant que tel, vous ne pouvez pas avoir de pointeurs de fonction qui pointent vers eux.

Travailler avec des objets de fonction

Pour résoudre ce problème, la norme introduit les objets de fonction dans [function.objects]. Ces objets peuvent se désintégrer en leurs opérateurs correspondants dans leur fonction Operator() :

  • Opérations arithmétiques
  • Comparaisons (equal_to, not_equal_to, Greater/less, Greater_equal/less_equal)
  • Opérations logiques
  • Opérations au niveau du bit

Les objets de fonction peuvent être utilisés comme arguments de pointeur de fonction, comme démontré dans la réponse fournie par l'utilisateur1034749.

Utilisation du type de classe standard opérateurs

Pour les opérateurs de bibliothèque standard, vous pouvez les utiliser comme pointeurs de fonction, bien que vous deviez vous référer à leurs instances de modèle respectives. Le compilateur a besoin de suffisamment d'indices pour déduire le bon modèle. Voici un exemple :

<code class="cpp">#include <iostream>
#include <string>

using namespace std;

template<class Test>
Test test_function(Test const &a, Test const &b, Test (*FPtr)(Test const &, Test const &))
{
   return FPtr(a, b);
}

int main()
{
   typedef basic_string<char> String;
   String a("test"), b("test2");
   cout << test_function(a, b, &operator+);
   return 0;
}</code>

Dans cet exemple, l'opérateur est fourni comme pointeur de fonction pour la fonction test_function. Notez que si vous omettez l'argument de modèle pour test_function, la déduction échouera dans certains compilateurs comme MSVC 2012.

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