我无法编译以下代码。我通常使用回调函数,但似乎在使用成员函数时,它有问题。你知道我的参数startPlayback的声明/定义有什么问题吗?
class VmapPlayer
{
void startPlayback();
void playAdBreak(int a, void (*callback)());
};
void VmapPlayer::playAdBreak(int a, void (*callback)())
{
cout << a << endl;
//callback();
}
void VmapPlayer::startPlayback()
{
playAdBreak(5, startPlayback); // Compile issue with "startPlayback" parameter
}
答案 0 :(得分:1)
void(* callback)()将回调声明为函数指针,但startPlayback不是自由函数,而是成员函数。这是修复它的一种方法:
class VmapPlayer
{
void startPlayback();
void playAdBreak(int a, void (VmapPlayer::*callback)());
};
void VmapPlayer::playAdBreak(int a, void (VmapPlayer::*callback)())
{
cout << a << endl;
(this->*callback)();
}
void VmapPlayer::startPlayback()
{
playAdBreak(5, &VmapPlayer::startPlayback);
}
如果您需要更多灵活性,并且C ++ 11可用,您可以使用std::function<void()>
来保存回调,并使用lambda表达式填充它,例如[this](){ startPlayback(); }