我有两个A和B类
class A
{
public:
void SetHandler(void (*p)(OMX_BUFFERHEADERTYPE*)){ Handler = p; };
private:
void (*Handler)(OMX_BUFFERHEADERTYPE*);
}
和
B中的我有一个功能
void B::handler(OMX_BUFFERHEADERTYPE* p){};
现在(从B)我打电话
inst_a.SetHandler(&B::handler);
我收到以下错误:
B.cpp:740:69: error: no matching function for call to ‘A::SetHandler(void (COMXVideo::*)(OMX_BUFFERHEADERTYPE*))’
B.cpp:740:69: note: candidate is:
A.h:161:8: note: void A::SetHandler(void (*)(OMX_BUFFERHEADERTYPE*))
A.h:161:8: note: no known conversion for argument 1 from ‘void (B::*)(OMX_BUFFERHEADERTYPE*)’ to ‘void (*)(OMX_BUFFERHEADERTYPE*)’
我做错了什么?
最好的问候
答案 0 :(得分:3)
&B::handler
不是函数指针,而是pointer to member function。如果B::handler
不需要B
的成员,则可以将其定义为static
。然后SetHandler(&B::handler)
就可以了。
如果必须有指向成员函数的指针,则可以将其定义为
void (B::*Handler)(OMX_BUFFERHEADERTYPE*);
当你调用这样的成员函数时,你需要一个指向对象的指针
(inst_b->*Handler)(omxbuffer);
或带参考
(inst_b.*Handler)(omxbuffer);
答案 1 :(得分:0)
尝试这样的事情:
template<typename C>
class EventObject
{
public:
typedef void (C::*FunctionType)();
template <typename ... T>
EventObject(C& obj,FunctionType methode): obj (obj), callback (methode) {};
void execute(){obj.*callback();};
private:
C& obj;
FunctionType callback;
};