Соглашения

Есть множество пользовательских соглашений которые необходимо соблюдать при создании новых типов экспортируемых в заголовочные файлы:

Реализация этих макросов является достаточно прямоленейной: большинство простых в использовании макросов обеспечивает gtype.h. Например использованные нами выше, мы можем записать следующим простым кодом объявляющим макросы:

#define MAMAN_BAR_TYPE (maman_bar_get_type ()) #define MAMAN_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_BAR_TYPE, MamanBar)) #define MAMAN_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_BAR_TYPE, MamanBarClass)) #define MAMAN_IS_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_BAR_TYPE)) #define MAMAN_IS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_BAR_TYPE)) #define MAMAN_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_BAR_TYPE, MamanBarClass))

Помните

Придерживайтесь имени klass, поскольку class зарегистрированное ключевое слово С++.

Следующий код демонстрирует как реализовать функцию maman_bar_get_type:

GType maman_bar_get_type (void) { static GType type = 0; if (type == 0) { static const GTypeInfo info = { /* You fill this structure. */ }; type = g_type_register_static (G_TYPE_OBJECT, "MamanBarType", &info, 0); } return type; }



[3] Maman это французское слово мама или mother - ни больше ни меньше.