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

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