如果定义了函数指针并在基类中赋值。它必须用于从派生自它的类中调用函数。我们怎么能这样做?
This显示了通过指针调用函数的示例。但这仅适用于指针在使用它的同一类中定义的情况。
This显示了调用父类函数的示例。我试过一些类似的东西,但它没有用。
From derived
(((Base)this)->*fncPtr)();
(((Base)this)->*(Base::fncPtr))();
以上两点都不起作用。请帮帮我。
答案 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
答案 2 :(得分:1)
如果你有一个指向基类void (Base::*fncPtr)()
的成员函数的指针,你可以使用指向派生对象this
的指针来调用它,其方式与调用指向成员函数的指针完全相同。相同的派生类。
(this->*fncPtr)();
(((Base)this)->*fncPtr)();
如果你真的想要({〗不需要),你可以明确地将this
投射到指针Base
,但这不是自Base
以来的方式。不是指针类型。这可行:
((Base*)this)->*fncPtr)();
但正如我所说,演员是多余的。