Passer un pointeur sur une fonction de membre de classe en tant que paramètre
J'ai écrit un petit programme où je suis en train de passer un pointeur de fonction membre d'une classe à une autre fonction. Pouvez-vous s'il vous plaît aidez-moi et où je vais mal..?
#include<iostream>
using namespace std;
class test{
public:
typedef void (*callback_func_ptr)();
callback_func_ptr cb_func;
void get_pc();
void set_cb_ptr(void * ptr);
void call_cb_func();
};
void test::get_pc(){
cout << "PC" << endl;
}
void test::set_cb_ptr( void *ptr){
cb_func = (test::callback_func_ptr)ptr;
}
void test::call_cb_func(){
cb_func();
}
int main(){
test t1;
t1.set_cb_ptr((void *)(&t1.get_pc));
return 0;
}
Je reçois le message d'erreur suivant lorsque j'essaie de le compiler.
error C2276: '&' : illegal operation on bound member function expression
source d'informationauteur ajay bidari
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas convertir un pointeur de fonction à
void*
.Si vous voulez un pointeur de fonction à point à un fonction membre vous devez déclarer le type de
Plus vous ne pouvez pas déclarer un pointeur de fonction à un membre lié fonction, par exemple
Au lieu de cela, vous devez obtenir l'adresse comme ceci:
Enfin, lorsque vous effectuez un appel à une fonction de pointeur qui pointe vers une fonction membre, vous devez appeler à une instance de la classe que la fonction est un membre de. Par exemple:
Voici l'exemple complet avec toutes les modifications appliquées:
En plus de Snp réponse, vous pouvez également utiliser un fonction wrapper à partir de C++11 pour stocker une fonction lambda: