El Wed, 18-04-2007 a las 09:18 -0400, Alejandro Valdes Jimenez escribió: > On Tue, 2007-04-10 at 16:22 -0400, Germán Poó Caamaño wrote: > > typedef struct _MyObjectPriv MyObjectPriv; > > > > A diferencia de MyObject y MyObjectClass, la definición de > > MyObjectPriv > > no la añades en el .h; por razones obvias: No quieres que nadie > > utilice > > los datos de una estructura privada. En el .h sólo van los símbolos > > que > > quieres exportar. > > > > Luego, en el .c declaras _MyObjectPrivate. Todos los elementos de > > dicha estructura son privados; dado que son visibles dentro del ámbito > > del archivo .c y nada más.
Voy a tratar de explicar más claramente esto, creo que quizás no fuí 100% explícito (cosas que pasan cuando uno conoce el código de memoria y asume que para el resto es igual de claro). La razón por la que el código está separado en gyrus-admin.c y gyrus-admin-mailbox.c es netamente para ordenar un poco el código de la clase GyrusAdmin. Sin embargo, ambos archivos *son parte* de la clase, y son los únicos 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ón > se verá reflejado), No debes acceder a la estructura GyrusAdminPrivate desde ningún archivo .c que no sea los antes mencionados. No hay razón para hacerlo. Para eso existen los métodos públicos (los definidos en gyrus-admin.h). > en ese caso no me queda mas opción que 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ólo ahi. Ambos archivos *son* la clase GyrusAdmin. gyrus-admin-mailbox.c *no es* una clase distinta. > > Será esto último un indicio de que talvés el código está desordenado?, No exactamente. El código está separado 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ódigo. > ¿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á definida, lo cual es muy mala idea. > talvés me estoy ahogando en un vaso de agua... Yo creo que sí. De todas maneras, esta discusión está +- offtopic. Podemos continuarla en [EMAIL PROTECTED] 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 <[EMAIL PROTECTED]>