/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

unary_negate

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
DvNe



Registrado: 02 Abr 2014
Mensajes: 5

MensajePublicado: 07/04/2014 12:52 pm
Título: unary_negate

Buenas estoy escribiendo la siguiente funcion

Código:
#include <iostream>
#include <cstring>
#include <functional>
#include <algorithm>

using namespace std;

class EsDigito {
public:
  bool operator() (const char& c) const { return isdigit(c); }
};

int main() {
  unary_negate<bool> EsAlfabetico (EsDigito);
  char letras2[] = " 452485A56321";
  inicio = letras;
  fin = letras + sizeof(letras)/sizeof(char);

  if (find_if(inicio,fin,EsAlfabetico()))
    cout << "Alfabetico" << endl;
  return 0;
}


Cuando compilo me sale el siguiente error:

prueba.cpp:35:39: error: faltan argumentos para la función std::unary_negate<bool> EsAlfabetico(EsDigito)’
prueba.cpp:30:22: nota: se declara aquí


Alguien me puede explicar el por qué
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 335
Ubicación: Argentina

MensajePublicado: 07/04/2014 3:55 pm
Título:

Buenas.
Según la documentación unary_negate.

Ejemplo para que compile.
Código:

class EsDigito {
 public:
   bool operator() (const char& c) const { return isdigit(c); }
   typedef char argument_type;
};

int main() {
   EsDigito es_digito;
   unary_negate<EsDigito> EsAlfabetico (es_digito);
 
   string letras("452085152321");

   if ( letras.end() != find_if(letras.begin() , letras.end() , EsAlfabetico ))
       cout << "Alfabetico" << endl;
   return 0;
}


Si no vas a utilizar los especificadores de acceso de una clase, además de public, define mejor una simple estrcutura.

Como unary_negate no es más que una negación de una unary_function, se podría realizar asi:
Código:

struct EsDigito : public unary_function<char, bool>
{
   bool operator() (const char c) const { return isdigit(c); }
};

int main()
{
 string letras("452085152321");

 if ( letras.end() != find_if(letras.begin() , letras.end() , not1(EsDigito())))
     cout << "Alfabetico" << endl;

 return 0;
}


Nota que not1() retorna una unary_negate.
Volver arriba
Dirección AIM
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com