C ++:测试类实例是否实现了虚方法

时间:2015-10-18 19:00:45

标签: c++ inheritance lua polymorphism

我有一个可以实现某些方法的对象的基类:

class Base {
    //default dummy methods
    virtual int methodFoo() { return 0; }
    virtual int methodBar() { return 0; }
};

class MyObject: public Base {
    int methodFoo() { /* do something */ }
};

当我有一个派生自Base的类的实例时,我需要知道它是实现methodFoo还是使用Base::methodFoo

void testMethodFoo(Base &obj) {
    if(obj.methodFoo == Base::methodFoo) {
        printf("obj does not implement methodFoo\n");
    }
    else {
        printf("obj implements methodFoo\n");
    }
}

不幸的是,像这样的简单比较并不起作用("无效使用成员函数")。我还没有办法做到这一点。

我想这样做的原因是Base表示将向Lua公开的对象,methodFoomethodBar是元方法(Lua可以调用它的基本回调)想要对该对象执行各种操作)。如果obj.methodFoo实际实现它,我只想在Lua中注册obj。我不想注册Base::methodFoo,因为Lua的行为会有所不同,具体取决于是否注册了元方法,并且在methodFoo内重新创建该行为可能很困难(如果该操作可能很慢)经常被调用。)

0 个答案:

没有答案