将函数指针保存在类中

时间:2012-12-26 22:39:01

标签: c++

  

可能重复:
  How can I pass a class member function as a callback?

我有两个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*)’
我做错了什么?

最好的问候

2 个答案:

答案 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;
};