![](/img/trans.png)
[英]std::bind to a std::variant containing multiple std::function types
[英]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.