【发布时间】:2018-05-17 00:11:29
【问题描述】:
C# 存在同样的问题,但不适用于 C++。
class Base
{
void dispatch()
{
if (newStyleHasBeenOverridden()) //how to find this out?
newStyle(42);
else
oldStyle(1, 2);
}
virtual void oldStyle(int, int) { throw "Implement me!"; }
virtual void newStyle(int) { throw "Implement me!"; }
}
class Derived:public Base
{
void newStyle(int) override
{
std::cout<<"Success!";
}
}
【问题讨论】:
-
简短的回答是:不。 C++ 不能以这种方式工作。你需要弄清楚你真正的问题是什么,因为this is an XY problem。
-
也许你可以比较两个类成员函数的指针(地址)。但正如@SamVarshavchik 所说,你为什么需要这样做?
-
不,@DavidRTribble——你不能“比较两个类成员函数的指针”。对于初学者来说,它们是两个不同的类别。最后,您会发现指向虚拟类成员函数的指针是同一个指针,无论特定实例的虚拟类是否被覆盖。毕竟虚函数就是这样工作的。
-
@SamVarshavchik,是的,我在发布后几分钟就意识到了这一点。但就像你说的,OP 的真正问题是正确使用覆盖的成员函数。