[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