Stockage des pointeurs de fonction membre dans std::function Map pour une seule classe
Lors de la tentative de stockage de pointeurs de fonction vers des fonctions membres d'une classe spécifique classe dans une carte std::function, il est crucial de comprendre la nécessité pour une fonction membre non statique d'être appelée avec un object.
Dans le code fourni, l'erreur provient de la signature de fonction incorrecte de std::function
L'extrait de code corrigé serait :
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // Correct std::function<void(Foo*)> f = &Foo::doSomething; } };
Pour lier davantage une fonction avec des paramètres, des espaces réservés C ou des lambdas C 11 peuvent être utilisés. Voici des exemples de ces approches :
Utilisation d'espaces réservés :
using namespace std::placeholders; std::function<void(Foo*, int, int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
Utilisation de Lambdas (C 11) :
std::function<void(Foo*, int, int)> f = [=](Foo* foo, int a, int b) { foo->doSomethingArgs(a, b); };
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!