1

可能重复:
如何将类成员函数作为回调传递?

我有两个班级 A 和 B

class A
{
public:
   void SetHandler(void (*p)(OMX_BUFFERHEADERTYPE*)){ Handler = p; };
private:
  void (*Handler)(OMX_BUFFERHEADERTYPE*);
}

在BI中有一个功能

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*)’

我究竟做错了什么?

最好的祝福

4

2 回答 2

3

&B::handler不是函数指针,而是指向成员函数的指针。如果B::handler不需要 的成员B,您可以定义它static。然后SetHandler(&B::handler)会工作。

如果你必须有一个指向成员函数的指针,你可以将它定义为

void (B::*Handler)(OMX_BUFFERHEADERTYPE*);

当你调用这样的成员函数时,你还需要一个指向对象的指针

(inst_b->*Handler)(omxbuffer);

或参考

(inst_b.*Handler)(omxbuffer);
于 2012-12-26T22:43:06.200 回答
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;
};
于 2012-12-26T23:26:27.127 回答