Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
已关闭6年。
我有一个其他类继承的基类(ThinkFunc)。 Func()是一个虚拟的void方法。
我希望能够确定类的类型,因此我认为查看Func()所指向的方法将是快速简便的。所以我正在尝试比较函数指针。但是显然下面的代码是不允许的。在C ++中,有没有一种方法可以使用子类化的虚函数?
如果您不想这样做,建议您按照WhozCraig的建议实现某种
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
已关闭6年。
我有一个其他类继承的基类(ThinkFunc)。 Func()是一个虚拟的void方法。
我希望能够确定类的类型,因此我认为查看Func()所指向的方法将是快速简便的。所以我正在尝试比较函数指针。但是显然下面的代码是不允许的。在C ++中,有没有一种方法可以使用子类化的虚函数?
bool found = false;
ThinkFunc *tfNode;
for (tfNode = this->thinkfuncs; tfNode; tfNode = (ThinkFunc*)tfNode->next)
{
if (tfNode->Func == &Thinkers::GroupBoxBouncePan::Func)
{
found = true;
break;
}
}
最佳答案
获取虚拟方法的地址通常会导致获得蹦床或"thunk"的地址,而不是实际方法的地址。为什么不使用dynamic_cast
如下:
bool found = false;
ThinkFunc *tfNode;
for (tfNode = this->thinkfuncs; tfNode; tfNode = (ThinkFunc*)tfNode->next)
{
if (dynamic_cast<Thinkers::GroupBoxBouncePan*>(tfNode) != null)
{
found = true;
break;
}
}
如果您不想这样做,建议您按照WhozCraig的建议实现某种
IsA
功能。关于c++ - 比较类方法和函数指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18747164/