簡體   English   中英

std :: list包含std :: function

[英]std::list containing std::function

我想要實現的是包含std::functions std::list 我正在嘗試實現一個回調系統,其中可以將函數添加到列表中,然后可以循環遍歷列表,並調用每個函數。

我在A類課上有:

std::list<std::function<void( bool )>> m_callbacks_forward;

bool registerForward( std::function<void(bool)> f ) { m_callbacks_forward.push_back ( f ); return true; };

void GameControllerHub::invokeForward( bool state ) {

    for( std::list<std::function<void(bool)>>::iterator f = m_callbacks_forward.begin(); f != m_callbacks_forward.end(); ++f ){

        f();
    }

}

然后在B班

std::function<void(bool)> f_move_forward = [=](bool state) {
        this->moveForward(state);
    };

    getGameController()->registerForward ( f_move_forward );

...

bool Player::moveForward( bool state ) {
...
}

但是在GameControllerHub::invokeForward我得到了錯誤

“類型'std :: list> :: iterator'(又名'__list_iterator')不提供呼叫操作員”

我正在使用Xcode進行編譯

您需要取消引用迭代器以獲取其引用的元素。 迭代器本身沒有operator()

(*f)(state); 或者,如果您願意,請按f->operator()(state);

在使用*調用之前,必須從迭代器中獲取function元素。 可以將其視為指向所需值(“ std::function對象)的“指針”,您必須對其“解除引用”:

for( std::list<std::function<void(bool)>>::iterator f = m_callbacks_forward.begin(); f != m_callbacks_forward.end(); ++f ){
    (*f)();
}

順便說一句,如果可以使用C ++ 11,則可以利用for-each循環:

for (std::function<void(bool)> f: m_callbacks_forward) {
    f();
}

甚至對auto更簡潔:

for (auto f: m_callbacks_forward) {
    f();
}

暫無
暫無

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

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