我编写了代码的简化版本,以说明我的问题。在我的程序中,代码中还有很多其他内容,这就是为什么我需要在类中包含一些函数。我不知道如何定义参数以便最终调用foo的f2。
如果这是解决问题的唯一方法,我可以在 testClass 中包含 f0,但我也不知道如何编写。
#include <iostream>
using namespace std;
class testClass {
public:
void f1();
void f2(int i);
} foo;
void f0(void (*f)(int)) {
(*f)(1337); // f = a pointer to f2, which is sent from f1
}
void testClass::f2(int i) {
cout << i;
}
void testClass::f1() {
f0(&f2);
}
int i;
int main() {
foo.f1(); // I want foo.f1 to call f0 which should call foo.f2()
cin >> i;
}
如果我要删除 testClass::和 foo.,它就会起作用。但既然我不能这样做,我应该如何正确定义 f0 中的参数?我应该如何在f1内部正确调用f0?
请帮忙!
最佳答案
非静态成员函数需要一个“this”对象来调用,它们不能像顶级或静态成员函数那样被调用。因此,您需要为 f0
提供一个额外的参数,并调整您的语法以进行成员函数调用。
void f0(testClass *obj, void (testClass::*f)(int)) {
(obj->*f)(1337);
}
更改 f1
以同时传递 this
。
void testClass::f1() {
f0(this, &testClass::f2);
}
关于c++ - 类函数指针作为静态函数中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28387789/