Armazenando objetos boost :: function em um contêiner
Eu tenho um vetor deKeyCallback
s:
typedef boost::function<void (const KeyEvent&)> KeyCallback
que eu uso para armazenar todos os ouvintes quando um botão do teclado é pressionado. Eu posso adicioná-los e despachar os eventos para todos os callbacks comfor_each
, mas eu não sei como realmente apagar um específicoKeyCallback
assinatura do meu vetor.
Por exemplo eu quero algo assim:
void InputManager::UnregisterCallback(KeyCallback callback) {
mKeyCallbacks.erase(std::find(mKeyCallbacks.begin(), mKeyCallbacks.end(), callback));
}
De acordo comboost::function
documentação (verAqui), não há tal coisa como comparar objetos de função, o que explicaria meus problemas com o acima. Então estou preso? Existe alguma maneira legal de contornar isso?
(Eu leio sobreboost::signals
para mecanismos de retorno de chamada, mas aparentemente é muito lento, e espero que os retornos de chamada sejam disparados possivelmente várias vezes em um quadro.)