我试图将成员函数作为参数传递给模板函数。我已经阅读了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'
我试图解决这个问题很长一段时间。如果有人能指出我的错误,我将非常感激。
答案 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;
}