带有继承的C ++回调

问题描述 投票:0回答:1

这是我的代码,带注释,您能帮助我使其正常工作吗?我简化了我的问题(我知道它看起来很奇怪)。我应该使用多态性还是类似的东西?谢谢^^

/* -------------------------------------------------------- */
// You can't edit this:
class Alpha
{
    void    PrintHello(void) { cout << "Hello" << endl; }
};
using callback = void(*)(const Alpha &);
class Beta
{
public:
    static CallbackAlpha(callback alpha) { /*...*/ }
};
/* -------------------------------------------------------- */
// But you can edit this:
class Gamma : public Alpha
{
    void    Function(void) { PrintHello(); }
}
void    SimpleFunction(const Gamma &gamma) { gamma.Function(); }
int main()
{
    Beta::CallbackAlpha(SipmleFunction); // DON'T WORK
    return 0;
}
/* -------------------------------------------------------- */
// ERROR : invalid conversion from 'void(*)(const Gamma&)' to 'callback' {aka 'void(*)(const Alpha&)'}
c++ inheritance callback
1个回答
0
投票

您需要与回调完全相同的原型。然后,您可以在函数内部使用强制转换来调整类型。

void SimpleFunction(const Alpha &gamma) 
{
    const auto& g = static_cast<const Gamma&>(gamma);
    g.Function(); 
}
© www.soinside.com 2019 - 2024. All rights reserved.