"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 » ?

Publié le 2024-12-21
Parcourir:850

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 f = std::bind(&Foo::doSomething, this);

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

Gestion des fonctions avec paramètres :

Pour les fonctions membres avec 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 f = std::bind(&Foo::doSomethingArgs,
                                                 this,
                                                 std::placeholders::_1,
                                                 std::placeholders::_2);

C 11 Lambda Syntaxe :

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

std::function f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
};

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3