gpt4 book ai didi

c++ - 如何向基类注册派生类成员函数指针

转载 作者:可可西里 更新时间:2023-11-01 17:37:20 29 4
gpt4 key购买 nike

与虚拟成员函数相反,我需要一个解决方案,其中可以注册在每个级别类派生中实现的函数,以供基类稍后调用。 (不仅仅是最派生的实现)

为此,我正在考虑为派生类提供一种机制,以便在派生类构造函数期间向基类注册它们的功能。

不过,我在处理成员函数指针参数时遇到了问题。我在想 Derived 是从 Base 派生的,应该自动转换 this 指针。

这是否可以接近我正在尝试的方式来完成,或者我是否需要使用静态成员函数、void *static_cast

class Base
{
protected:
typedef void (Base::*PrepFn)( int n );
void registerPrepFn( PrepFn fn ) {};
}

class Derived : public Base
{
Derived() {
registerPrepFn( &Derived::derivedPrepFn );
};

void derivedPrepFn( int n ) {};

}

编译器错误:

error: no matching function for call to 'Derived::registerPrepFn(void (Derived::*)(int))'
note: candidates are: 'void Base::registerPrepFn(void (Base::*)(int))'

最佳答案

如果您只需要击败错误消息,那么转换就可以了:

class Derived : public Base
{
Derived() {
registerPrepFn( static_cast<PrepFn>(&Derived::derivedPrepFn) );
};

void derivedPrepFn( int n ) {};

}

通常使用 Base* p 调用它(提供它实际指向 Derived):(p->*registered)(0)

参见 http://ideone.com/BB9oy一个工作示例。

关于c++ - 如何向基类注册派生类成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066731/

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