[C con Clase] stringstream y los epacios en blancos en las cadenas

Pedro Mateo pedromateoa en gmail.com
Jue Sep 20 00:37:54 CEST 2007


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 ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070919/5b5bd151/attachment.html>


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