私はstd::deque
を使用してコールバック機能を維持しています。関数ポインタをstd :: dequeからvalで削除するには?
すべては、特定のコールバックを削除する以外は完全に機能します。
typedef std::function<void(void)> cb_Action;
std::deque<cb_Action> actionCallbacks;
私はアイテムを1つずつ追加するか、問題なくすべて削除することができます。
しかし、deque
変数から特定のコールバックを削除することはできません。
actionCallbacks.erase (std::remove(actionCallbacks.begin(), actionCallbacks.end(), callbackToRemove), actionCallbacks.end());
それは時間のエラーをコンパイルできます:
だから、binary '==': no operator found which takes a left-hand operand of type:'std::function<void(void)>' (or there is no acceptable conversion)
、どのように私は、特定のcb_Action
を削除することができますか?
これは、std :: functionを互いに比較できないためです。 ==と!=演算子の唯一のオーバーロードは、nullptrと比較されるものです。 –
私はあなたがコールバックとそのハンドラを含む構造体を格納すべきだと思う。 size_t id、特定のコールバックを削除したい場合はそのハンドラを提供する必要があります – stryku
@stryku:「コールバックとそのハンドルが含まれています。 「ハンドラ」(名詞)は、何かを「扱う」ものです。コールバックは、C++でハンドラを書く典型的な方法です。 「ハンドル」は、(とりわけ)オブジェクトを参照できる方法です。 –