c++ - 将回调与类成员函数一起使用时出现问题

标签 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
}

最佳答案

void (*callback)() 将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);
}

如果您需要更大的灵 active ,并且 C++11 可用,您可以使用 std::function<void()>保留回调,并用 lambda 表达式填充它,例如 [this](){ startPlayback(); }

关于c++ - 将回调与类成员函数一起使用时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292040/

相关文章:

node.js - Node : Callback was already called

具有前向声明的 C++ 成员回调

javascript - 将 Ajax 回调函数值分配给 JavaScript 变量

c++ - for (;;) 这是一个无限循环吗?

c++ - 使用命名空间和 using 指令不适用于 std::enable_if_t

android - Activity和Fragment之间如何回调?

c - gtk。我怎样才能通过id获取小部件?

c++ - 在 Mac 上获取系统时区的 UTC 偏移量 (C++)

android - 使用 NDK 在 C/C++ 中将 YUV 解码为 RGB

c# - Protobuf-net 与 C++ 的官方谷歌 Protobuf 不兼容(消息编码)