Maison > développement back-end > C++ > Comment stocker des pointeurs de fonction membre dans des objets génériques « std :: function » ?

Comment stocker des pointeurs de fonction membre dans des objets génériques « std :: function » ?

Linda Hamilton
Libérer: 2024-12-23 20:39:10
original
352 Les gens l'ont consulté

How to Store Member Function Pointers in Generic `std::function` Objects?

Stockage des pointeurs de fonction membre dans des objets std::function génériques

Lors de la tentative de stockage des pointeurs de fonction membre d'une classe particulière dans une carte à l'aide std::function objets, les développeurs peuvent rencontrer une erreur : "le terme n'est pas évalué comme une fonction prenant 0 argument." Cette erreur se produit lors de l'attribution du pointeur de fonction membre directement à l'objet std::function.

Le nœud du problème réside dans le fait que les fonctions membres non statiques nécessitent un pointeur "this" implicite comme premier argument. . Pour remédier à cela, le premier argument doit être explicitement lié.

Solution :

std::function<void(void)> f = std::bind(&Foo::doSomething, this);
Copier après la connexion

Cette approche lie efficacement le pointeur "this" comme premier argument, permettant l'objet std::function pour capturer correctement la fonction membre.

Gestion des fonctions avec Paramètres :

Pour les fonctions membres avec des paramètres, des espaces réservés doivent être spécifiés pour indiquer la position des arguments liés.

using namespace std::placeholders;
std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs,
                                                 this,
                                                 std::placeholders::_1,
                                                 std::placeholders::_2);
Copier après la connexion

Syntaxe Lambda C 11 :

Si le compilateur prend en charge les lambdas C 11, une approche plus concise peut être utilisé :

std::function<void(int, int)> f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
};
Copier après la connexion

En suivant ces techniques, les développeurs peuvent stocker et invoquer efficacement des pointeurs de fonction membre à l'aide d'objets std::function génériques.

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 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