Re: private data con gobject en C
- From: Germán Poó Caamaño <gpoo ubiobio cl>
- To: avaldes utalca cl
- Cc: "Advocacy, chit-chat and event planning in Chile" <gnome-cl-list gnome org>
- Subject: Re: private data con gobject en C
- Date: Tue, 10 Apr 2007 16:22:35 -0400
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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]