将非静态成员函数作为 std::function 传递
Passing non-static member function as std::function
我也有类似情况:
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
这是否意味着我必须在传递 passedFunction
时提供 callingFunction
中的所有参数?这是不可能的,因为 passedFunction
的参数在 calledFunction
中指定
您可以编写一个 lambda 捕获 this
,可以在其中调用 passedFunction
。
calledFunction([this](int v) { this->passedFunction(v); });
我也有类似情况:
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
这是否意味着我必须在传递 passedFunction
时提供 callingFunction
中的所有参数?这是不可能的,因为 passedFunction
的参数在 calledFunction
您可以编写一个 lambda 捕获 this
,可以在其中调用 passedFunction
。
calledFunction([this](int v) { this->passedFunction(v); });