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

标签 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'

我已经尝试了很长时间来解决这个问题。如果有人能指出我哪里出了问题,我将不胜感激。

最佳答案

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

std::function< T() >

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

std::bind(&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;
}

关于c++ - 将成员函数作为回调传递给模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29383346/

相关文章:

c++ - 不按回车进入下一条指令

c++ - n 是负数、正数还是零?返回 1、2 或 4

c++ - 允许碰撞的极快哈希函数

c++ - 使用多个输入 vector 中值的笛卡尔积调用 lambda

c++ - 如果另一个线程导致它在 Windows 上崩溃,我该如何延迟销毁我的进程?

C++11 - 返回通过左值传递给函数的右值?

c++ - const std::optional 的内容总是 const 吗?

c# - 将 C++ 方法转换为 C# 时遇到问题

c++ - 避免使用禁用的复制构造函数进行隐式复制

c++ - 开发与 C++ 库交互的 UI 应用程序