c++ - 类函数指针作为静态函数中的参数

标签 c++ function class pointers

我编写了代码的简化版本,以说明我的问题。在我的程序中,代码中还有很多其他内容,这就是为什么我需要在类中包含一些函数。我不知道如何定义参数以便最终调用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/

相关文章:

c++ - 获取 0 作为堆栈分配数组的大小,其大小在运行时给定

php - 重构困境 : User Account Functionality in PHP

c++ - 变量或字段 'name of var'声明为void

javascript - 测试 null 不起作用

function - Julia 中的这个递归函数是如何工作的?

java - 如何使用 Jackson 反序列化泛型 List<T>?

c++ - 黑客等级 : Day 1: Data Types in C++

c++ - const 和非 const 类型的相同模板特化

ZeroMemory 的 C# 等效代码

list - Visual Studio代码-类和方法列表?