[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