[C con Clase] stringstream y los epacios en blancos en lascadenas

Rolando Kindelan Nuñez rkindelan en estudiantes.uci.cu
Jue Sep 20 17:35:23 CEST 2007


podrias intentar con una plantilla especifica para el tipo que deseas
 
ej:
para string
 
template <>
operator string()
    {
<tu codigo>
     }
 
para char
 
template <>
operator char(){
<tu codigo>
   }
 
la idea es mas o menos asi, pero debes tener cuidado con el string puesto que es una clase y el template todo debe resolverse  en tiempo de compilacion, prueba con string&, sino funciona me gustaria que p[ostearas como lo solucionas.
 
espero haber sido de ayuda
 
pensar en el futuro, hace el presente mas complicado.

________________________________

From: cconclase-bounces en listas.conclase.net on behalf of Pedro Mateo
Sent: Wed 19.09.2007 18:37
To: Lista de correo sobre C y C++
Subject: Re: [C con Clase] stringstream y los epacios en blancos en lascadenas


gracias por la respuesta pero dejame explicarte mi planes
resulta que estoy trabajando con postgres y estoy trantando
de crear un objeto que consulte una tabla de postgres y me permita
hacerles cambios a los datos via este objeto
 
en realidad los resultados que obtengo de postgres son readonly
pero en este objeto estoy sobrecargando el operador = para almacenar en un 
en un contenedor de datos todos los valores que entran, referenciandolos a la fila y a la columna 
a la que se le desea hacer el cambio
 
como c++ es estricto con los tipos, este contenedor debe ser de datos string
es decir, si de modifica un codigo numerico debo convertirlo a string y almacenarlo,
lo mismo si entra un bool, int,float o double
 
para la sobrecarga del operador = utilizo una plantilla en la que con un stringstream convierto todo a
string luego lo almaceno
en esta situacion como el destino de la informacion es un string puedo utilzar la funcion stringstrean::str() 
para obtener mi string y al almacenarlo
 
pero a la hora de sacar la informacion del objeto mediante una plantilla que me genera la sobrecarga de conversion
de datos a todos los posibles valores la cosa cambia. 
 
ejemplo
**************************************************************************
template <typename T>
operator T(){
     T resultado=obtiene_valor_original_de_campo();
     if(existe_cambios()){
           string cambio=obtiene_cambios();
            stringstream convierte;
             convierte<<cambio;
             convierte>>resultado;
     }
     return resultado;
}
****************************************************
esto funcionara para todos los tipos escalares menos para char* ni string puesto que si el cambio contiene un 
espacio solo le retornara el valor hasta el espacio
 
mi idea es hacer una sobrecarga especial de operador de conversion para string y char* para darle un tratamiendo 
diferente
 
excusame por lo largo de la explicacion
si tienes otra idea sera bienvenida
 
bye
 
 
 


 
El día 19/09/07, Steven Richard Davidson <stevenrichard.davidson en gmail.com> escribió: 

	Hola Pedro,
	
	On 9/19/07, Pedro Mateo <pedromateoa en gmail.com > wrote:
	> saludo a todos
	>
	> tengo este codigo
	> *********************************************
	> #include <iostream>
	> #include <sstream>
	>
	> using namespace std; 
	>
	> main(){
	>        stringstream x;
	>        x<<"bonito todo me parece bonito!";
	>        string r;
	>         x>>r;
	>         cout<<r<<endl; // este es mi problema:esto devueve solo "bonito" 
	>                                // y no presenta nada despues de un espacio
	> vacio
	> }
	> ************************************************
	> debe ser una tonteria pero he buscado y no encuentro la solucion del 
	> problema
	
	No hay solución, porque no existe ningún problema. El operador >> se
	sobrecarga con este comportamiento. Si lo que quieres hacer es extraer
	y guardar la cadena, con espacios incluidos, en un objeto de tipo 
	'string', entonces usa la función (global) 'getline()'. Esto sería,
	
	stringstream ssCadena;
	ssCadena << "bonito todo me parece bonito!";
	
	string sCad;
	getline( ssCadena, sCad ); 
	cout << sCad << endl;
	
	Espero que esto aclare la duda.
	
	Steven
	
	_______________________________________________
	Lista de correo Cconclase Cconclase en listas.conclase.net
	http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
	Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
	


------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: winmail.dat
Type: application/ms-tnef
Size: 10106 bytes
Desc: no disponible
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070920/2828f563/attachment.bin>


Más información sobre la lista de distribución Cconclase