【发布时间】:2016-10-06 08:05:18
【问题描述】:
可以通过基类函数指针调用派生类吗,如下例所示?
我知道我的示例有效,但它是否保证总是这样做(假设对象实际上实现了该函数!),或者这只是我正在使用的编译器的特性?
通过这种逻辑,不能简单地从“CBase”派生所有类(在这种情况下它是空的,所以我猜没有开销)并忽略函数指针中的类型?
#include <iostream>
struct CBase
{
};
struct CDerived : CBase
{
void MyFunction()
{
std::cout << "Called OK" << std::endl;
}
};
typedef void (CBase::*FunctionPointer)();
int main()
{
CDerived* base = new CDerived();
FunctionPointer pointer = static_cast<FunctionPointer>(&CDerived::MyFunction);
(base->*pointer)();
delete base;
}
示例使用场景: 一个派生类,它采用一个或多个指向基类中“回调”的指针。是否可以只使用派生类定义回调类型,从而放弃对模板的需求?
【问题讨论】:
-
为什么要这样做?
-
以我有一个带有“回调”指针的派生类为例。我想知道我是否可以使用派生类来定义它并放弃对模板的需求。
-
我试过了,it worked。我不知道它是否应该......
-
对
clean感到抱歉。我的意思是pure -
好的,multiple inheritance doesn't stump it either...我现在很感兴趣。好问题!
标签: c++ polymorphism member-function-pointers