我有一个可以实现某些方法的对象的基类:
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公开的对象,methodFoo
和methodBar
是元方法(Lua可以调用它的基本回调)想要对该对象执行各种操作)。如果obj.methodFoo
实际实现它,我只想在Lua中注册obj
。我不想注册Base::methodFoo
,因为Lua的行为会有所不同,具体取决于是否注册了元方法,并且在methodFoo
内重新创建该行为可能很困难(如果该操作可能很慢)经常被调用。)