如何正确检查对象是否实现了接口

Tha*_*lia 7 c++ inheritance qt multiple-inheritance

我想为某些对象实现自定义行为.

为此,让我的项目(继承自QGraphicsItem)实现一些接口.

class SomeParentItem 
{ 
    SomeParentItem(bool x) { x = true; } 
    void function1() {}
};
class SomeInterface
{
    virtual void function2() = 0;
};
class XYZItem : public QGraphicsXYZItem, public SomeParentItem, public SomeInterface
{
    XYZItem(bool x):SomeParentItem(x) {}
    virtual void function2() { x = false; }
};
class MPQItem : public QGraphicsMPQItem, public SomeParentItem
{
    MPQItem (bool x):SomeParentItem(x) {}
};
Run Code Online (Sandbox Code Playgroud)

从外面看,我以为我就是这么做的

SomeInterface* item1 = dynamic_cast<SomeInterface*>(item);
if(item1 == NULL)
    item->function1(); 
else
    item1->function2();  
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会崩溃...通常......所以我正在创建一个标志来测试,如果标志是真的,那么只有敢于施放.

但我一直在想,它不应该崩溃.所以我勇敢再次尝试,这次是在一个QWidget孩子.而不是崩溃我得到了

QWidget::insertAction: Attempt to insert null action
Run Code Online (Sandbox Code Playgroud)

这是if(item1 == NULL)给出这个信息的测试......

如何正确检查我的项目是否实现SomeInterface

注意:item不能为空.

Fré*_*lva -2

一些简单的事情怎么样:

class SomeInterface
{
    virtual void function2() = 0;
    virtual qint32 role() =0;
};
Run Code Online (Sandbox Code Playgroud)

并为自定义行为返回不同的 int ?