C ++传递函数指针,带参数到函数

时间:2015-08-11 11:58:11

标签: c++ function pointers

我想我误解了函数指针是如何工作的。在这个例子中:

class Helper
{
  public:

      typedef void (*SIMPLECALLBK)(const char*);
      Helper(){};
      void NotifyHelperbk(SIMPLECALLBK pCbk)
      { m_pSimpleCbk = pSbk; }
  private:
     SIMPLECALLBK m_pSimpleCbk;

}

// where i call the func
class Main
{
    public:
      Main(){};
    private:
      Helper helper
      void SessionHelper(const char* msg);

}

Main.cpp

void Main::SessionHelper(const char* msg)
{
   ....
} 

helper.NotifyHelperbk(&Main::SessionHelper);

我收到以下错误:

error C2664: 'Main::NotifyHelperbk' : cannot convert parameter 1 from 'void (__thiscall Main::* )(const char *)' to 'Helper::SIMPLECALLBK'
1>        There is no context in which this conversion is possible

我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

Main::SessionHelper是一种非静态方法。因此,为它添加static,以便能够将其用作函数指针。或者使用成员方法指针(您需要一个实例来调用它)。

答案 1 :(得分:0)

如果您使用c ++ 11,则可以使用std::bind

class Helper
{
  public:
    void NotifyHelperbk(std::function<void(char*)> func){
    /* Do your stuff */
    func("your char* here");
}

你的主要人物:

Main.cpp

Main m;

helper.NotifyHelperbk(std::bind(&Main::SessionHelper, m, std::placeholder_1));