On Tue, 2007-04-10 at 15:43 -0400, Alejandro Valdes Jimenez wrote: > Estimados... > > Alguien (claudio en particular. jejejeje) puede explicar como definir > datos privados en la definición de un objeto de una clase con gobject en > C? > > Vi como lo hace en gyrus, pero no me queda claro en que momento se > indica explicitamente que tal o cual dato es privado.
No soy Claudio, tampoco he visto el código de Gyrus. Pero la situación es más o menos de la siguiente forma: Se tiene MyObject, entonces tu archivo de encabezado tendrás: 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. Además, cuando se inicializa la clase (función my_object_class_init), inicializas los atributos privados. **Debe hacerse al último**[1] Sería algo así como: g_type_class_add_private (object_class, sizeof (MyObjectPrivate)); Cuando se inicializa una instancia (función my_object_init), entonces aplicas: static void my_object_init (MyObject *my_object) { ... my_object->priv = G_TYPE_INSTANCE_GET_PRIVATE (my_object, MY_TYPE_OBJECT, MyObjectPrivate); ... } Luego, ya puedes usar my_object->priv->atributo. La lectura recomendada es "The Glib Object system": http://le-hacker.org/papers/gobject/ [1] Para garantizar la compatibilidad binaria entre versiones (ABI), pudiendo añadir la cantidad de atributos privados que desees en cualquier momento. -- Germán Poó Caamaño Concepción - Chile