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);
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);
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); };
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!