[C con Clase] pasar estructuras a un parametro generico del metodo de una clase
Rubén Calabuig
racalabuig en gmail.com
Mie Oct 21 14:24:56 CEST 2009
David, la burrada fue mia, ya lo solucioné, gracias por tu ayuda.
El lun, 19-10-2009 a las 20:08 -0300, David Fire escribió:
> tal vez es una burrada lo que pongo pero es gratis :-)
> básicamente lo que queres hacer es serializar y desserializar una
> estrucutra (o varias)
> lo que podes hacer es pasa el puntero a void pero dentro castealo a
> byte (unsigned char) y lito
> y lo mismo para leerlo pasa un puntero a void que apunta a la
> estructura y lees bytes que se meten dentro de la estructura en el
> mismo orden que fueron sacados.
>
> David
>
> El 19 de octubre de 2009 15:57, Rubén Calabuig <racalabuig en gmail.com>
> escribió:
> Gracias por contestar:
>
> Estoy programando en C++.
>
> El problema es que no entiendo cómo utilizar las templates en
> este
> caso.
>
> El método en cuestión es el siguiente:
>
> //========================================================================
> // METODO : bool guardarRegistro(void* reg, int tam)
> // ACCION : Graba un registro en el archivo.
> // PARAMETROS: void* reg --> puntero a la estructura del
> registro.
> // int tam --> tamano en bytes de la estructura.
> // RETORNO : true = exito / false = fracaso.
> //........................................................................
> // EJEMPLO :
> // if(archivo1.guardarRegistro(alumno,
> sizeof(alumno)))
> // {
> // cout << "registro grabado con exito" << endl;
> // }
> // else
> // {
> // cout << "no pido guardarse el registro" <<
> endl;
> // }
> //------------------------------------------------------------------------
>
> bool clsArchivo::guardarRegistro(void* reg, int tam)
> {
> switch(estado)
> {
> case CREADO : arch = fopen(nombre,"ab");
> write(reg,tam,1,arch);
> fclose(arch);
> return true;
> break:
>
> case AGREGAR :
> case MODIFICAR: fwrite(reg,tam,,1,arch);
> return true;
> break:
>
> default : return false;
> }
> }
> //===== FIN METODO
> =====================================================
>
> ¿pdrías darme una mano?
>
>
> El lun, 19-10-2009 a las 10:46 -0300, David Fire escribió:
>
> > hola
> > es C o C++?
> > si es C++ proba con templates
> > aparte que error te da?
> > David
> >
> > El 19 de octubre de 2009 09:28, Rubén Calabuig
> <racalabuig en gmail.com>
> > escribió:
> > Hola a todos:
> >
> > Estoy haciendo una clase, "clsArchivo", para
> instanciar
> > objetos con
> > archivos binarios asociados.
> >
> > La clase tiene tres atributos
> > FILE* arch; // puntero a una estructura FILE.
> > char* nombre; // puntero a una cadena generada
> > dinamicamente para
> > // contener el nombre del archivo
> en disco.
> > tEstado estado; // estado actual del archivo
> >
> > NOTA: tEstado es una enumeracion declarada de la
> siguiente
> > forma:
> >
> > enum tEstado{DESASIGNADO,INDETERMINADO,INEXISTENTE,
> > CREADO,LEER,AGREGAR,MODIFICAR,CERRADO};
> >
> >
> > Tods los métodos de acción sobre el archivo
> asociado,
> > funcionan a la
> > perfección, pero el problema se plantea cuando
> intento
> > desarrollar
> > métodos, que reciban como parámetros a estructuras
> que deben
> > ser
> > escritas o leidas.
> >
> > No puedo pasar un formato específico de estructura,
> ya que si
> > así lo
> > hiciera, mi clase no sería generérica. Entonces,
> pensé en
> > utilizar
> > punteros de tipo void pero no les encuentro la
> vuelta, de
> > cualquier
> > forma que los escriba, me dan error.
> >
> > Aclaro que estoy programando en el IDE Code::Blocks
> con el
> > compilador
> > gcc, tanto para entorno Windows como par Linux.
> >
> > Un ejemplo de prototipo sería el siguiente:
> >
> > tEstado clsArchivo::guardarRegistro(void* reg, int
> tam)
> >
> > Donde:
> > void* reg --> es el puntero a la estructura.
> > int tam --> es el tamaño de la estructura.
> >
> > La pregunta concreta es cómo debe ser la función
> fwrite o
> > fread, yo
> > intenté lo siguiente:
> >
> > fread(reg,tam,1,arch)
> >
> > Pero me da error.
> >
> > Desde ya muchas gracias.
> >
> >
> > --
> > Rubén Alberto Calabuig
> >
> >
> >
> > _______________________________________________
> > 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
> >
> >
> >
> > --
> > (\__/)
> > (='.'=)This is Bunny. Copy and paste bunny into your
> > (")_(")signature to help him gain world domination.
> >
> > _______________________________________________
> > 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
> --
> Rubén Alberto Calabuig
>
>
>
> _______________________________________________
> 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
>
>
>
>
> --
> (\__/)
> (='.'=)This is Bunny. Copy and paste bunny into your
> (")_(")signature to help him gain world domination.
>
>
> _______________________________________________
> 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
--
Rubén Alberto Calabuig
Más información sobre la lista de distribución Cconclase