我如何找出成员函数属于哪个类

时间:2019-08-29 22:27:32

标签: c++

假设我要在子类中定义一个新方法:

auto ChildClass::newMethod(int foo)
{
    bar(foo);
    // ...

我不知道bar的确切来源,我只知道它在类的环境中可用(即它是在其祖先之一中定义的)。

现在,假设我想将bar作为回调传递给onBaz方法,该方法需要一个指向成员函数的指针:

    // ...
    onBaz(&/* ??? */::bar);
}

在不使用IDE的情况下,如何确定这种情况下属于哪个类栏?

1 个答案:

答案 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的类。