C++:通过基 class 中定义的函数指针从派生调用函数

C++: Calling a function from derived by a function pointer defined in base class

如果定义了函数指针并在基class中赋值。它必须用于从派生的 class 调用函数。我们该怎么做?

This 显示了一个通过指针调用函数的例子。但这仅适用于指针在使用它的地方的相同 class 中定义的情况。

This 显示调用父 class 函数的示例。我尝试了一些类似的但没有用。

From derived
(((Base)this)->*fncPtr)();
(((Base)this)->*(Base::fncPtr))();

以上两个都不行。请帮帮我。

给定一个指向 Derived 的成员函数的指针:

void (Derived::*derivedFncPtr)() = &Derived::someMemberFunction;

首先,将其转换为指向Base的成员函数的指针:

void (Base::*baseFncPtr)() = static_cast<void (Base::*)()>(derivedFncPtr);

然后,调用它:(假设*this是一个动态类型DerivedBase

(this->*baseFncPtr)();

Live example

如果你有一个指向基void (Base::*fncPtr)()的成员函数的指针,你可以用一个指向派生对象this的指针来调用它,就像调用一个指向成员函数的指针一样相同的派生 class.

(this->*fncPtr)();

Demo here


(((Base)this)->*fncPtr)();

如果你真的想(这不是必需的),你可以显式地将 this 转换为 Base 的指针,但这不是完成的方式,因为 Base 不是一个指针类型。这会起作用:

((Base*)this)->*fncPtr)();

但正如我所说,演员阵容是多余的。

只需使用:

(this->*fncPtr)();

没有其他要求。转换为基类型是隐式的。所以你不需要明确地转换它。