警告:请注意,这是一个我可能永远不会以这种方式解决的愚蠢问题。因此,矛盾的标题。但是,由于我实际上在代码中看到了类似的东西,所以我在一个非常大的系统上经历过,我变得很感兴趣。:)
假设我们有一个简化的类:
class Foo
{
void a();
virtual void b();
}
然后是另一堂课
class Bar : public Foo
{
void a();
}
如果程序的一般部分将所有这些类作为 type 的基类处理Foo
,我如何以最佳方式在其中调用“正确”版本的a
函数b
?因为对象有可能是 type Bar
。并且说您,由于遗留原因,无法更改现有代码并使基类成为虚拟函数等。
我所做的是a
在基类中创建虚拟并b
在内部实现,Bar
因为我有这个选项。但是,为了争论,让我们说这是不可能的或不允许的。使用这样的方法实施解决方法会有多“错误”。
void b() {
...
Bar* dabar;
if((dabar = dynamic_cast<Bar*>(this)) != NULL) {
dabar->a();
}
else {
a();
}
}
正如我所说,请注意这是在处理基类并想要调用子类的函数时。不是反过来。