0

我有如下函数指针声明:

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

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

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

我收到以下错误:

错误:“无效”之前的预期主表达式。

问题是什么?

4

2 回答 2

0

When you are passing function pointer to a function, just pass the function name.

Start("Name", &Service::callbackStatus);
于 2012-04-27T05:41:20.517 回答
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 );

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

于 2012-04-27T06:19:37.110 回答