gpt4 book ai didi

c++ - 具有继承类的空指针

转载 作者:行者123 更新时间:2023-11-30 01:22:45 24 4
gpt4 key购买 nike

我有一个类 A,它需要静态事件处理程序。我需要静态事件处理程序,因为中断正在调用事件处理程序。

class A {
private:
static void (*fn1)();

public:
A();
static void setFn1(void (*function)(void));
static void onEvent();
};

A::A() { }

void A::setFn1(void (*function)(void)) {
fn1 = function;
}

void A::onEvent() {
A::fn1();
}

我想根据应用程序继承A并创建事件 child 中的处理程序逻辑,在此处使用 fn2

class B : public A{
public:
B();
void fn2();
};

B::B() {
A::setFn1(&fn2);
}

void B::fn2() {...}

当我调用:A::setFn1(&fn2) 时,出现以下编译器错误。

#169 argument of type "void (B::)()" is incompatible with parameter of type "void ()()

我的脑子里满是这些空指针,我什至不知道我是否还在使用正确的设计。 A 类包含我所有的实用方法。 B 类包含我的应用程序特定功能。

最佳答案

非静态成员函数不是自由函数,类型不同。您不能像使用指向函数的指针一样使用非静态成员函数:

struct test {
void foo();
static void bar();
};

&test::foo --> void (test::*)()
&test::bar --> void (*)()

我不会像建议将函数更改为 static 那样深入,因为我发现当前的设计不是特别有用。但是你可以接受这个并尝试重新考虑一个更有意义的设计。 (所有过程的单个回调函数?为什么要继承?一个用户定义的构造函数,它与编译器生成的功能相同?在一个不应该是实例化?...)

关于c++ - 具有继承类的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15819653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com