这是我的代码,带注释,您能帮助我使其正常工作吗?我简化了我的问题(我知道它看起来很奇怪)。我应该使用多态性还是类似的东西?谢谢^^
/* -------------------------------------------------------- */
// 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&)'}
您需要与回调完全相同的原型。然后,您可以在函数内部使用强制转换来调整类型。
void SimpleFunction(const Alpha &gamma)
{
const auto& g = static_cast<const Gamma&>(gamma);
g.Function();
}