This question already has answers here:
Using generic std::function objects with member functions in one class

(6个答案)


2年前关闭。




我有类似的情况:
class A {
    void callingFunction() {
      calledFunction(passedFunction);
    }

    void calledFunction(std::function<void(int)> foo) {
    }

    void passedFunction(int arguments) {
    }
};

编译器错误是
error: invalid use of non-static member function

如何在不将passedFunction设为静态的情况下实现此目标?

这样做:
calledFunction(std::bind(&A::passedFunction, this);

产生此错误:
error:static assertion failed: Wrong number of arguments foor pointer-to-member

这是否意味着在传递callingFunction时必须在passedFunction中提供所有参数?这是不可能的,因为在passedFunction中指定了calledFunction的参数

最佳答案

您可以编写一个lambda捕获this,可以在其上调用passedFunction

calledFunction([this](int v) { this->passedFunction(v); });

关于c++ - 将非静态成员函数传递为std::function ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50449052/

10-12 23:40