2011-08-30 29 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); 

Me gustaría poder comparar dos funciones boost :: con la misma firma. ¿Qué debería modificar para obtener este código compilable?comparar dos impulso :: función

+1

Ver [¿Por qué es comparable std :: función no la igualdad?] (Http://stackoverflow.com/q/3629835/20984) –

Respuesta

14

No puede. Lea la boost function FAQ 's primera entrada:

  1. Por qué no puedo comparar impulso :: objetos función con el operador == o operador =!?

La comparación entre los objetos boost :: function no se puede implementar "bien", y por lo tanto no se implementará. ...

+0

¿Por qué esto no se puede implementar bien? – Guillaume07

+3

@ Guillaume07: El resto de la entrada de preguntas frecuentes que publicó un enlace explica eso. Pensé mejor copiar y pegar toda la entrada en la respuesta –

-1

¿Está buscando comparar firmas o igualdad de funtor (que dos funtores apuntan a la misma dirección de memoria subyacente)? Si su este último, puede utilizar la interfaz proporcionada por boost/function_equal.hpp:

Boost Function Equal

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

Respuesta incorrecta, 'function_equal' solo es útil para permitir la comparación de función * wrappers * (' boost :: function') con función * objects * (funtores o punteros a función)) (ver [Comparación de los objetos de la función Boost.Function] (http://www.boost.org/doc/libs/1_47_0/doc/html/function/tutorial.html#id1362038)). La comparación de dos envoltorios de funciones no es posible. (Admito que la documentación no es muy clara al respecto.) –

+0

Esto es lo que quiero. –