62 votes

Pointeur de fonction C ++ en tant que paramètre

J'essaie d'appeler une fonction qui est passée en tant que pointeur de fonction sans argument, mais je ne peux pas le faire fonctionner.

 void *disconnectFunc;

void D::setDisconnectFunc(void (*func)){
    disconnectFunc = func;
}

void D::disconnected(){
    *disconnectFunc;
    connected = false;
}
 

91voto

GManNickG Points 155079

La bonne façon de faire est:

 typedef void (*callback_function)(void); // type for conciseness

callback_function disconnectFunc; // variable to store function pointer type

void D::setDisconnectFunc(callback_function pFunc)
{
    disconnectFunc = pFunc; // store
}

void D::disconnected()
{
    disconnectFunc(); // call
    connected = false;
}
 

12voto

Nikolai N Fetissov Points 52093

Remplacez void *disconnectFunc; par void (*disconnectFunc)(); pour déclarer une variable de type pointeur de fonction. Ou encore mieux utilisez a typedef :

 typedef void (*func_t)(); // pointer to function with no args and void return
...
func_t fptr; // variable of pointer to function
...
void D::setDisconnectFunc( func_t func )
{
    fptr = func;
}

void D::disconnected()
{
    fptr();
    connected = false;
} 

8voto

WhirlWind Points 8305

Vous devez déclarer disconnectFunc en tant que pointeur de fonction, pas en tant que pointeur vide. Vous devez également l'appeler en tant que fonction (avec des parenthèses) et aucun "*" n'est nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X