Recientemente tomé la decisión de cambiar un vector de punteros en un vector de punteros inteligentes, pero aunque estos punteros inteligentes son compatibles con STL, no pude convertir algunos algoritmos para usarlos .usando mem_fun() para contenedor de punteros inteligentes
Considérese una
class Base
{
...
virtual bool valid();
};
¿Cómo convertir
bool is_any_valid(vector< Base* > v)
{
return v.end() !=
find_if(v.begin(), v.end(), mem_fun(&Base::valid));
}
en esto?
bool is_any_valid(vector< my_smart_ptr<Base> v)
{
// mem_fun() fails, because valid() is not a member of my_smart_ptr<Base> !!!
// return v.end() !=
// find_if(v.begin(), v.end(), mem_fun(&Base::valid));
}
Se puede suponer que my_smart_pointer <> tiene esencialmente la misma interfaz que shared_ptr <>, pero no puedo utilizar impulso en mi proyecto.
¿Hay algún adaptador (genérico) que pueda escribir para permitir que mem_fun o mem_fun_ref funcionen? miro preferiblemente para una solución en línea, como:
find_if(v.begin(), v.end(), mem_fun(some_adapter(&Base::valid)));
porque hay muchos sucesos similares de tales líneas.
'mem_fn' también está disponible en MSVC++, http://msdn.microsoft.com/en-us/library/bb982851.aspx –
sí, exactamente lo que necesito. Solo (después de leer el código) no puedo entender por qué no han implementado la referencia a un caso sin const. –