[C con Clase] pasar estructuras a un parametro generico del metodo de una clase
Rubén Calabuig
racalabuig en gmail.com
Lun Oct 19 20:57:40 CEST 2009
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
Más información sobre la lista de distribución Cconclase