Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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/

10-11 23:01
查看更多