将成员函数作为回调函数传递给模板函数

时间:2015-04-01 05:19:31

标签: c++

我试图将成员函数作为参数传递给模板函数。我已经阅读了Stackoverflow中关于将成员函数作为参数传递给其他函数的所有线程。但是,不知怎的,我不能让这件事变得简单:

template <typename T>
T Class::registerCallback(std::function<T()> callback) {
  // do something
}
bool Class::member() {
  return true;
}
void Class::method() {
  registerCallback(std::bind(&Class::member, this, std::placeholders::_1));
}

我收到的错误消息是:

no matching member function for call to 'registerCallback'

我试图解决这个问题很长一段时间。如果有人能指出我的错误,我将非常感激。

1 个答案:

答案 0 :(得分:1)

必须注册的回调没有任何参数。

  

的std ::功能&LT; T()&gt;

但是,您尝试注册一个接受单个参数的回调。

  

std :: bind(&amp; Class :: member,this,std :: placeholders :: _ 1)

此外,Class::member函数没有任何参数。

试试这个:

class Class
{
public:
    // I'm not sure why this was returning a 'T' changed to 'void'
    template<typename T>
    void registerCallback(std::function<T()> callback)
    {
        // do something
    }

    void method()
    {
        // The 'member' function doesn't have any parameters so '_1' was removed
        registerCallback<bool>(std::bind(&Class::member, this));
    }

    // The callback is supposed to return 'T' so I changed this from 'bool'
    bool member()
    {
        return true;
    }
};

int main()
{
    Class<bool> c;
    c.method();

    return 0;
}