假设我要在子类中定义一个新方法:
auto ChildClass::newMethod(int foo)
{
bar(foo);
// ...
我不知道bar
的确切来源,我只知道它在类的环境中可用(即它是在其祖先之一中定义的)。
现在,假设我想将bar
作为回调传递给onBaz
方法,该方法需要一个指向成员函数的指针:
// ...
onBaz(&/* ??? */::bar);
}
在不使用IDE的情况下,如何确定这种情况下属于哪个类栏?
答案 0 :(得分:2)
看来我可以做到:
// ...
onBaz(&ChildClass::bar);
}
毕竟bar
的环境中ChildClass
可用。这样可以正确地求出原始类中方法的指针。
实际上要检查是哪个类,我想使用的一个技巧是定义一个带有任意参数的lambda并查看编译错误:
// ...
struct Nothing {};
[](Nothing){}(&ChildClass::bar);
}
海湾合作委员会告诉我:
error: no match for call to ‘(ChildClass::newMethod()::__lambda0) (void (ActualClassWhereBarIsDefined::*)(int))’
[](Nothing){}(&ChildClass::bar);
^
其中ActualClassWhereBarIsDefined
是定义bar
的类。