Ich verwende std::deque
, um Rückruffunktionen zu behalten.Wie entfernt man den Funktionszeiger von std :: deque by val?
Alles funktioniert einwandfrei, außer das Entfernen eines bestimmten Rückrufs.
typedef std::function<void(void)> cb_Action;
std::deque<cb_Action> actionCallbacks;
Ich kann Elemente eins nach dem anderen hinzufügen oder alle ohne Probleme löschen.
Aber ich kann nicht einen spezifischen Rückruf von dem deque
Variable entfernen.
actionCallbacks.erase (std::remove(actionCallbacks.begin(), actionCallbacks.end(), callbackToRemove), actionCallbacks.end());
Es gibt Zeitfehler kompilieren:
binary '==': no operator found which takes a left-hand operand of type:'std::function<void(void)>' (or there is no acceptable conversion)
Also, wie kann ich ein bestimmtes cb_Action
entfernen?
Dies liegt daran, dass std :: function nicht miteinander verglichen werden kann. Die einzige Überladung für den Operator == und! = Sind diejenigen, die mit nullptr verglichen werden. –
Ich denke, Sie sollten Struktur speichern, die Callback und seine Handler enthalten, z. size_t id, und wenn Sie bestimmte Callback entfernen möchten, sollten Sie seinen Handler – stryku
@stryku: Ich denke, Sie meinen "enthält Callback und seine Handle". Ein "Handler" (Substantiv) ist eine Sache, die etwas "handhabt" (verb). Ein Callback wäre eine typische Möglichkeit, einen Handler in C++ zu schreiben. Ein "Handle" ist (unter anderem) eine Möglichkeit, auf ein Objekt zu verweisen. –