Re: private data con gobject en C



El Wed, 18-04-2007 a las 09:18 -0400, Alejandro Valdes Jimenez escribi� On Tue, 2007-04-10 at 16:22 -0400, Germ�Po�ama�rote:
> > typedef struct _MyObjectPriv MyObjectPriv;
> > 
> > A diferencia de MyObject y MyObjectClass, la definici�e
> > MyObjectPriv
> > no la a�s en el .h; por razones obvias: No quieres que nadie
> > utilice
> > los datos de una estructura privada.  En el .h s�van los s�olos
> > que
> > quieres exportar.
> > 
> > Luego, en el .c declaras _MyObjectPrivate.  Todos los elementos de 
> > dicha estructura son privados; dado que son visibles dentro del �ito
> > del archivo .c y nada m� 

Voy a tratar de explicar m�claramente esto, creo que quiz�no fu�00% expl�to (cosas que pasan cuando uno conoce el c�o de memoria y
asume que para el resto es igual de claro).

La raz�or la que el c�o est�eparado en gyrus-admin.c y
gyrus-admin-mailbox.c es netamente para ordenar un poco el c�o de la
clase GyrusAdmin. Sin embargo, ambos archivos *son parte* de la clase, y
son los �s que deben tener acceso a los elementos privados.

> 
> me queda claro el "como" deben separarse las definiciones sin embargo, a
> riesgo de quedar como "humbertiro", cuando necesito utilizar tal
> structura privada desde otro archivo .c no funcionar�en la compilaci� se ver�eflejado),

No debes acceder a la estructura GyrusAdminPrivate desde ning�chivo .c que no sea los antes mencionados. No hay raz�ara hacerlo.
Para eso existen los m�dos p�os (los definidos en gyrus-admin.h).

>  en ese caso no me queda mas opci�ue definir la
> estructura privada en el .h e incluir esa cabecera en el otro
> archivo .c. pero eso no cumple con lo que me indicas.

Debes incluirlo en gyrus-admin.c y gyrus-admin-mailbox.c, y s�ahi.
Ambos archivos *son* la clase GyrusAdmin. gyrus-admin-mailbox.c *no es*
una clase distinta. 
> 
> Ser�sto �o un indicio de que talv�el c�o est�esordenado?,

No exactamente. El c�o est�eparado por comodidad. Piensa un poco en
C# desde el dialecto 2.0. Puedes definir una clase parcialmente en
archivos diferentes, si eso te ayuda a ordenar el c�o.

> �como lo hago cuando desde otro archivo .c necesito utilizar la
> estructura privada definida en otro archivo .c?

No puedes. A menos que incluyas el archivo .c donde la estructura est�efinida, lo cual es muy mala idea.

> talv�me estoy ahogando en un vaso de agua...

Yo creo que s�De todas maneras, esta discusi�st�- offtopic.
Podemos continuarla en gyrus-list gnome org o en el reporte del bug
relacionado con esto[1] (a menos que la audiencia pida a gritos que nos
quedemos :-)

Claudio

[1] http://bugzilla.gnome.org/show_bug.cgi?id=429138


-- 
Claudio Saavedra <csaavedra alumnos utalca cl>




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]