Maison > développement back-end > C++ > le corps du texte

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

Patricia Arquette
Libérer: 2024-10-25 11:52:30
original
115 Les gens l'ont consulté

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

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

Le défi

Utiliser des pointeurs de fonction pour référencer des dans les opérateurs comme l'opérateur "supérieur à" (">") dans une classe de modèle, il est nécessaire de spécifier les surcharges de type correctes. Cependant, cela peut être difficile.

Pourquoi les opérateurs intégrés ne peuvent pas être des pointeurs de fonction

Les opérateurs intégrés en C, tels que les opérateurs arithmétiques et logiques, ne sont pas de véritables fonctions d'opérateur. Au lieu de cela, ils sont directement traduits en instructions d’assemblage par le compilateur. Par conséquent, il n'est pas possible d'obtenir des pointeurs de fonction pour eux.

Les objets de fonction comme alternative

Les objets de fonction, définis dans la norme C, fournissent un moyen de travailler avec des opérations qui se comportent comme des pointeurs de fonction. mais ne sont pas des fonctions réelles. Ce sont des objets modélisés qui se désintègrent en l'opérateur analogue dans leur fonction Operator().

Par exemple, l'objet de fonction std::greater représente l'opérateur supérieur à (">"). Il peut être utilisé comme argument de pointeur de fonction dans une classe de modèle.

<code class="cpp">template<typename ParamsType, typename FnCompareType>
class MyAction
{
public:
    MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCpmpare) 
    : arg0_(arg0), arg1_(arg1), fnCompare_(fnCompare_) {}

    bool operator()()
    {
        if((fnCompare_)(arg0_,arg1_))
        {
            // Do this
        }
        else
        {
            // Do s.th. else
        }
    }

private:
    ParamsType& arg0_;
    ParamsType& arg1_;
    FnCompareType& fnCompare_;
}</code>
Copier après la connexion
<code class="cpp">void doConditional(int param1, int param2)
{
    MyAction<int, std::greater<int>> action(param1, param2);
    if(action())
    {
        // Do this
    }
    else
    {
        // Do that
    }
}</code>
Copier après la connexion

Opérateurs de type de classe standard

Bien que les pointeurs de fonction ne puissent pas être utilisés directement avec les opérateurs intégrés, ils peut être utilisé avec des opérateurs de bibliothèque standard implémentés en tant que fonctions réelles. Cependant, il est nécessaire d'instancier l'instance spécifique de la classe modèle pour l'opérateur, et le compilateur peut avoir besoin d'indices pour déduire correctement l'argument du modèle.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!