簡體   English   中英

使用回調與類成員函數時遇到問題

[英]Trouble using callback with class member function

我在編譯以下代碼時遇到問題。 我通常可以使用回調函數,但是似乎在使用成員函數時會出現問題。 您知道我的參數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)()將回調聲明為函數指針,但是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(); } [this](){ startPlayback(); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM