回调函数指针错误

时间:2012-04-27 05:37:03

标签: pointers

我有如下函数指针声明:

 int Start(char* pName, void (*callback)(void *));

当我传递函数指针时如下:

Start("Name", &Service::callbackStatus(void*));

我收到以下错误:

错误:在'void'之前预期的primary-expression。

有什么问题?

2 个答案:

答案 0 :(得分:0)

当您将函数指针传递给函数时,只需传递函数名称。

Start("Name", &Service::callbackStatus);

答案 1 :(得分:0)

传递函数指针可以通过以下方式完成:

    int Start( char* pName, void (Service::* callback)(void *), Service& obj )
    {   
       (obj.*(callback))( pName );
       return 0;
    }

   ...    
   Service obj;
   Start( "Name", &Service::callbackStatus, obj );

但这很丑陋。

使用C ++,将接口的指针或引用传递给函数更为优雅:

class MyInterface
{
public:
   virtual void callbackStatus(void* a) = 0;
};

class Service : public MyInterface
{
public:   
   void callbackStatus(void* a) { std::cout << "hello\n";  }
};

int Start( char* pName, MyInterface& obj )
{   
   obj.callbackStatus( pName ); 
   return 0;
}

...
Service obj;
Start( "Name", obj );

另一种方法是将指针传递给静态成员函数。它可以与普通的非成员函数类似地使用。