Sistema de mensagens: retornos de chamada podem ser qualquer coisa

Estou tentando escrever um sistema de eventos para o meu jogo. Os retornos de chamada que meu gerente de eventos armazenará podem ser tanto funções simples quanto functores. Também preciso comparar funções / functors para saber qual deles devo desconectar do gerenciador de evento

• Inicialmente tentei usar a função boost ::; ele lida perfeitamente com funções e functores, exceto que não possui operador ==, portanto, não posso remover retornos de chamada se assim o deseja

class EventManager
{
    typedef boost::function<void (boost::weak_ptr<Event>)> Callback;
    std::map<Event::Type, std::vector<Callback>> eventHandlerMap_;
};

• Também tentei usar o boost :: signal, mas isso também me deu um problema de compilação relacionado ao operador ==:

binary '==': nenhum operador encontrado que utilize um operando do lado esquerdo do tipo 'const Functor' (ou não há conversão aceitável)

void test(int c) {
    std::cout << "test(" << c << ")";
}

struct Functor
{
    void operator()(int g) {
        std::cout << "Functor::operator(" << g << ")";
    }
};

int main()
{
    boost::signal<void (int)> sig;

    Functor f;

    sig.connect(test);
    sig.connect(f);

    sig(7);

    sig.disconnect(f); // Error
}

Alguma outra sugestão sobre como eu posso implementar isso? Ou talvez, como eu possa fazer o sinal boost :: function ou boost :: signal funcionar? (Prefiro usar a função boost ::, pois ouvi o sinal ser bastante lento para pequenas coleções de itens.)

Editar Essa é a interface que eu gostaria que o EventManager tivess

class EventManager
{
  public:
    void addEventHandler(Event::Type evType, Callback func);
    void removeEventHandler(Event::Type evType, Callback func);

    void queueEvent(boost::shared_ptr<Event> ev);
    void dispatchNextEvent();
};

questionAnswers(4)

yourAnswerToTheQuestion