Maison >développement back-end >C++ >Comment appeler correctement des pointeurs vers des fonctions membres en C ?

Comment appeler correctement des pointeurs vers des fonctions membres en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-31 13:20:11635parcourir

How to Correctly Call Pointers to Member Functions in C  ?

Appel de pointeurs vers des fonctions membres en C

Les pointeurs vers des fonctions membres offrent un moyen pratique de stocker et d'exécuter des fonctions membres spécifiques tout en offrant une flexibilité dans la liaison dynamique. Cependant, l'appel de ces pointeurs de fonction a sa syntaxe unique.

Avec les fonctions membres non statiques, l'appel d'un pointeur de fonction nécessite de fournir à la fois des paramètres nommés et un pointeur this, qui représente l'objet sur lequel la fonction sera invoquée. Le code corrigé suivant montre la syntaxe correcte :

typedef void (Box::*HitTest)(int x, int y, int w, int h);

for (std::list::<HitTest>::const_iterator i = hitTestList.begin(); i != hitTestList.end(); ++i)
{
    HitTest h = *i;
    (box->*h)(xPos, yPos, width, height);
}

Ici, box est un pointeur vers l'objet Box qui fonctionnera comme le pointeur this. En utilisant box->*h, nous appelons essentiellement la fonction membre h sur l'instance Box spécifique pointée par box.

En ce qui concerne l'ajout de fonctions membres à la liste, le code corrigé serait :

std::list<HitTest> list;

for (std::list<Box*>::const_iterator i = boxList.begin(); i != boxList.end(); ++i)
{
    Box* box = *i;
    list.push_back(&Box::HitTest);
}

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:
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