2011-08-30 16 views
7
void ff(int){} 

void Unscribe(const boost::function<void(int)>& f) 
{ 
    std::map<int, boost::function<void(int)> > map; 

    map[0] = ff; 

    if(map[0] == f) 
    { 

    } 
} 

Unscribe(ff); 

Vorrei poter confrontare due funzioni boost :: con la stessa firma. Cosa devo modificare per ottenere questo codice compilabile?confrontare due boost :: funzione

+1

Sede [Perché è std :: funzione non uguaglianza paragonabili?] (Http://stackoverflow.com/q/3629835/20984) –

risposta

14

Non è possibile. Leggi 's il boost function FAQ prima voce:

  1. Perché non è possibile confrontare boost :: oggetti funzione con operatore == o operatore =!?

Il confronto tra gli oggetti boost :: function non può essere implementato "well" e pertanto non verrà implementato. ...

+0

perché questo non può essere implementato bene? – Guillaume07

+3

@ Guillaume07: il resto della domanda frequente ho pubblicato un link per spiegarlo. Ho pensato meglio di copiare l'intera voce nella risposta –

-1

Stai cercando di confrontare le firme, o l'uguaglianza del functor (che due funtori puntano allo stesso indirizzo di memoria sottostante)? Se la sua quest'ultimo, è possibile utilizzare l'interfaccia fornita da boost/function_equal.hpp:

Boost Function Equal

template<typename F, typename G> bool function_equal(const F& f, const G& g); 
+2

La risposta errata, 'function_equal' è utile solo per consentire il confronto di function * wrappers * (' boost :: function') con function * objects * (functors o function pointers) (vedi [Confronto degli oggetti funzione Boost.Function] (http://www.boost.org/doc/libs/1_47_0/doc/html/function/tutorial.html#id1362038)). Il confronto di due wrapper di funzioni non è possibile. (Ammetto che la documentazione non è molto chiara a riguardo). –

+0

Questo è quello che voglio. –