使用类成员函数回调时遇到麻烦

时间:2014-01-22 19:22:31

标签: c++ callback

我无法编译以下代码。我通常使用回调函数,但似乎在使用成员函数时,它有问题。你知道我的参数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
}

1 个答案:

答案 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(); }