Maison >développement back-end >C++ >Comment lier correctement les fonctions membres C aux objets std :: function ?
Liaison de fonctions membres à des objets std::function génériques
En C, vous pouvez rencontrer des situations dans lesquelles vous devez stocker des pointeurs de fonction vers un membre fonctions d'une classe particulière dans un conteneur qui accepte les objets std::function. Cependant, tenter de lier une fonction membre non statique directement à une fonction std::function peut entraîner des erreurs.
Considérez le code suivant :
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } };
Ce code entraînera un compilateur erreur car les fonctions membres non statiques acceptent implicitement un pointeur "this" comme premier argument. Pour résoudre ce problème, vous devez lier l'objet au préalable à l'aide de la fonction std::bind.
std::function<void(void)> f = std::bind(&Foo::doSomething, this);
Cette version lie correctement le pointeur "this" à la fonction membre, vous permettant de le stocker dans l'objet std::function sans déclencher l'erreur.
Pour les fonctions membres qui acceptent des paramètres, vous pouvez utiliser std::placeholders pour spécifier leur positions :
using namespace std::placeholders; std::function<void(int,int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
Alternativement, si votre compilateur prend en charge les lambdas C 11, vous pouvez les utiliser pour créer l'objet std::function :
std::function<void(int,int)> f = [=](int a, int b) { this->doSomethingArgs(a, b); }
En utilisant ces techniques, vous pouvez liez efficacement les fonctions membres aux objets std::function génériques, vous permettant de les stocker et de les manipuler facilement.
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!