none
¿ list.remove_if sin una clase como parametro ? RRS feed

  • Pregunta

  • Hola.

    Queria preguntar si es posible utilizar el remove_if de las list del STL, sin tener que crear una clase para pasarle el parametro

    Tengo una lista de objetos X. una de las propiedades de X es Largo. Tengo que remover de una lista, los objetos X que tengan Largo = 0

    class EvaluarLargo : public std::unary_function<X, bool> 
    { public: bool operator( ) ( X &val ) 
      { return val.Largo == 0;} 
    };
    
    list<X>	ListaX ;
    ......
    ListaX.remove_if(EvaluarLargo());
    


    ¿ Es posible utilizar un metodo de la clase X ? por ejemplo  remove_if(X::EvaluarLargo())
    Para no tener que crear otra clase para tal efecto.
    Es un poco "raro" tener que poner el comentario de mi codigo que "cree esta clase para cumplir con el formato pedido por remove_if".

    Gracias.





    • Editado dedoz jueves, 16 de abril de 2009 16:43 error codigo
    jueves, 16 de abril de 2009 16:39

Todas las respuestas

  • No lo he probado nunca, pero posiblemente un método miembro estático con la firma adecuada de la clase podría funcionar ya que tiene semántica de función, que es una de las posibilidades de un predicado.

    De todos modos, siempre puedes usar una función global normal y corriente como predicado, con ciertas pérdidas de rendimiento:

    template<class X> bool LargoCero(X &val)
    {
    return val.Largo==0;
    }

    O incluso sin parametrizar.

    jueves, 16 de abril de 2009 17:51
    Moderador