[C con Clase] Instanciar una Clase y accederla desde varias

Steven Davidson steven en conclase.net
Jue Mayo 3 21:45:12 CEST 2007


Hola Pepe,

El pasado 2007-05-03 19:15:54, Pepe escribió:

P> Hola Steven.

[CORTE]

P> Al final lo habia resuelto tal cual comentas aca. Mi problema era que
P> print (este metodo va logueando el estado del programa) accedia a un
P> archivo o stdout (dependiendo si es posible o no abrir el archivo) y
P> no habia hecho la declaracion del archivo estatica.
P> Creo que la mejor solucion para el problema es que "print" sea un
P> metodo estatico al igual que el atributo/miembro archivo, si hay otra
P> forma que creen mejor espero sus sugerencias.
P> Dejo un poco mas explicita la clase Log:
P> ..
P> class Log {
P> public:
P>    static void print(string msg);
P>    static void error(string msg);
P> private:
P>     static FILE *file;
P> };
P> En la implementacion solo abro file y print/error hace un "cout" de
P> msg. Core es quien inicializa esta clase para tener una referencia al
P> archivo.

No soy partidario de diseñar clases estáticas, especialmente bajo C++. Bajo C++, podríamos usar espacios con nombre (namespaces, en inglés) bajo los cuales definimos las entidades que nos interesan. Por ejemplo,

namespace logueo
{

FILE *file;
void print( string msg );
void error( string msg );

}

El resto de la implementación no debería darnos problemas. Por ejemplo,

logueo::file = fopen( "datos.log", "a+" );


De todas maneras, no sé si esto es lo que quieres. Si sólo vas a tener un fichero general para todas las operaciones de la bitácora, entonces sugiero hacer lo anterior. Sin embargo, si quieres tener varias bitácoras abiertas, entonces necesitarás varios objetos de tipo 'logueo' y entonces ya entramos en otro asunto el cual ya traté anteriormente.


Espero haberte orientado algo mejor.

Steven


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