C ++:从基类中定义的函数指针派生函数

时间:2016-11-23 17:26:57

标签: c++ c++11 pointers function-pointers member-function-pointers

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

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

This显示了调用父类函数的示例。我试过一些类似的东西,但它没有用。

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

以上两点都不起作用。请帮帮我。

3 个答案:

答案 0 :(得分:3)

只需使用:

(this->*fncPtr)();

不需要其他任何东西。转换为基类型是隐式的。所以你不需要明确地强制转换它。

答案 1 :(得分:1)

给出指向Derived的成员函数的指针:

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

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

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

然后,调用它:(假设*this是动态类型为Base的{​​{1}})

Derived

Live example

答案 2 :(得分:1)

如果你有一个指向基类void (Base::*fncPtr)()的成员函数的指针,你可以使用指向派生对象this的指针来调用它,其方式与调用指向成员函数的指针完全相同。相同的派生类。

(this->*fncPtr)();

Demo here

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

如果你真的想要({〗不需要),你可以明确地将this投射到指针Base,但这不是自Base以来的方式。不是指针类型。这可行:

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

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