Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿cómo definir un manipulador de flujo parametrizado?

Estas en el tema de ¿cómo definir un manipulador de flujo parametrizado? en el foro de C/C++ en Foros del Web. El libro en el que he aprendido me enseñó a definir manipuladores de flujo no parametrizados, ejemplo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original ostream & ...
  #1 (permalink)  
Antiguo 25/01/2013, 19:20
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 13 años
Puntos: 8
¿cómo definir un manipulador de flujo parametrizado?

El libro en el que he aprendido me enseñó a definir manipuladores de flujo no parametrizados, ejemplo:

Código C++:
Ver original
  1. ostream& dobleFinLinea(ostream& salida)
  2. {
  3.    return salida << "\n\n" << flush;
  4. }

Pero mencionaba que también se podían definir manipuladores parametrizados (aunque se salía del alcance del libro)

¿Cómo se hace esto? Por ejemplo, para poner:

Código C++:
Ver original
  1. cout << "asdf" << finesDeLinea(5);

Saludos.
  #2 (permalink)  
Antiguo 26/01/2013, 01:13
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: ¿cómo definir un manipulador de flujo parametrizado?

Pues exactamente igual, pero con 3 parámetros.

Código C++:
Ver original
  1. ostream & fineslinea(ostream& salida, string ss, int a)
  2. {
  3. char lb = 0x0a;
  4.     string s;
  5.     for (int i = 0; i < a; i++)
  6.     {
  7.         s.push_back(lb);
  8.     }
  9.     return salida << ss.c_str() << s.c_str();
  10. }
  11.  
  12. int main(){
  13.  
  14. finesdelinea(cout,"mensajito cualquiera",10);
  15. }

que imprime la cadena introducida más 10 saltos de línea.

Uso string para hacerlo más sencillo.

Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor
  #3 (permalink)  
Antiguo 26/01/2013, 08:13
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: ¿cómo definir un manipulador de flujo parametrizado?

Sobrecargando el operador "<<" para poder invocar un puntero a función almacenado en un objeto.

En éste ejemplo la función "fines_linea" es la encargada de insertar los saltos de línea en el flujo, para ello un puntero a dicha función es almacenado en un objeto "smanip", el cual es utilizado a través de sobrecargar el operador "<<". La función "finesdelinea" únicamente se encarga de construir dicho objeto "smanip".

Observa que la clase "smanip" y la sobrecarga del operador "<<" te sirven de manera genérica para seguir definiendo más manipuladores con un solo parámetro.

Código C++:
Ver original
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <iterator>
  4. using namespace std;
  5.  
  6. struct smanip{
  7.     ostream& (*f)(ostream&, int);
  8.     int i;
  9.     smanip(ostream& (*ff)(ostream&, int), int ii):f(ff), i(ii){}
  10. };
  11.  
  12. ostream& operator<<(ostream& os, const smanip &m){
  13.     return m.f(os, m.i);
  14. }
  15.  
  16. ostream& fines_linea(ostream& os, int n){
  17.     ostream_iterator<char> it(os);
  18.     fill_n(it, n, '\n');
  19.     return os;
  20. }
  21.  
  22. inline smanip finesdelinea(int n){
  23.     return smanip(fines_linea, n);
  24. }
  25.  
  26. int main(){
  27.     cout << "Hola" << finesdelinea(10) << "Adios";
  28.     return 0;
  29. }

Saludos.

Etiquetas: definir, flujo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:50.