我有如下函数指针声明:
int Start(char* pName, void (*callback)(void *));
当我传递如下函数指针时:
Start("Name", &Service::callbackStatus(void*));
我收到以下错误:
错误:“无效”之前的预期主表达式。
问题是什么?
我有如下函数指针声明:
int Start(char* pName, void (*callback)(void *));
当我传递如下函数指针时:
Start("Name", &Service::callbackStatus(void*));
我收到以下错误:
错误:“无效”之前的预期主表达式。
问题是什么?
When you are passing function pointer to a function, just pass the function name.
Start("Name", &Service::callbackStatus);
传递函数指针可以通过以下方式完成:
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 );
另一种方法是将指针传递给静态成员函数。它的使用方式与普通的非成员函数类似。