Maison > développement back-end > C++ > Comment std::bind gère-t-il les fonctions membres et pourquoi une référence d'objet est-elle requise ?

Comment std::bind gère-t-il les fonctions membres et pourquoi une référence d'objet est-elle requise ?

DDD
Libérer: 2024-10-31 23:47:29
original
633 Les gens l'ont consulté

How does std::bind handle member functions, and why is an object reference required?

Comment std::bind fonctionne avec les fonctions membres

Lors de l'utilisation de std::bind avec des fonctions de classe membre, plusieurs concepts clés entrent en jeu :

Le premier argument : un pointeur

Dans la syntaxe std::bind(&Foo::print_sum, &foo, 95, _1), le premier argument est pas une référence à un pointeur de fonction, comme on pourrait le supposer. Au lieu de cela, il s'agit d'un pointeur représentant la fonction membre elle-même.

Le deuxième argument : une référence d'objet

Le deuxième argument, dans ce cas &foo , est une référence à un objet de la classe appropriée (Foo). Ceci est nécessaire car une fonction membre nécessite une instance d'objet pour opérer.

Comment std::bind gère les fonctions membres

En interne, std::bind détecte que le le premier argument est un pointeur vers une fonction membre et le convertit en un objet appelable à l'aide de std :: mem_fn. Cet objet appelable conserve le pointeur vers la fonction membre et nécessite une instance d'objet comme premier argument.

Le besoin d'une référence d'objet

Lors de la liaison à une fonction membre , une référence d'objet devient essentielle car la fonction membre est associée à une classe spécifique et nécessite qu'un objet de cette classe soit invoqué. Le deuxième argument de std::bind fournit cette référence d'objet, permettant à la fonction membre d'opérer sur l'objet spécifié.

Exemple

Considérez le code suivant :

<code class="cpp">struct Foo {
    int value;
    void f(int n) { std::cout << "f(" << this->value << ", " << n << ")\n"; }
};

int main() {
    Foo foo{10};

    auto f_bound = std::bind(&Foo::f, &foo, _1);
    f_bound(20); // Output: f(10, 20)
}</code>
Copier après la connexion

Dans cet exemple, f_bound est un objet appelable qui appelle la fonction membre f sur l'objet foo avec tous les arguments supplémentaires qu'il reçoit. Ainsi, lorsque nous appelons f_bound(20), cela équivaut à appeler foo.f(20), qui affiche "f(10, 20)".

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal