Function pointer as parameter

后端 未结 3 1748
心在旅途
心在旅途 2020-12-07 12:52

I try to call a function which passed as function pointer with no argument, but I can\'t make it work.

void *disconnectFunc;

void D::setDisconnectFunc(void          


        
相关标签:
3条回答
  • 2020-12-07 13:15

    The correct way to do this is:

    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;
    }
    
    0 讨论(0)
  • 2020-12-07 13:15

    You need to declare disconnectFunc as a function pointer, not a void pointer. You also need to call it as a function (with parentheses), and no "*" is needed.

    0 讨论(0)
  • 2020-12-07 13:17

    Replace void *disconnectFunc; with void (*disconnectFunc)(); to declare function pointer type variable. Or even better use 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;
    }
    0 讨论(0)
提交回复
热议问题