GLib
  • Initial page
  • I. Концепция
    • Background
    • Типы данных и программирование
  • Динамическая система типов Glib
    • Введение
    • Функции копирования
    • Соглашения
    • Неинстанциируемые не классифицированные базовые типы
    • Инстанциируемые классифицируемые типы: объекты
    • Неинстанциированные классифицированные типы: Интерфейсы.
  • Основной класс GObject
    • Введение
    • Инстанциация объекта
    • Объектное управление памятью
    • Свойства объекта
  • Система сообщений GObject
    • Замыкания
    • Сигналы
  • II. Описание API
    • GType
    • GTypePlugin
    • GTypeModule
    • GObject часть 1
    • GObject часть 2
    • Enums and Flags
    • GBoxed
    • Generic Values
    • Parameters and Values часть 1
    • Parameters and Values часть 2
    • Parameters and Values часть 3, ага
    • Value arrays
  • III. Описание инструментов
    • glib-mkenums
    • glib-genmarshal
    • gobject-query
  • IV. Руководство
    • Как определить и реализовать новый GObject?
    • Объектные методы
    • Как определять и реализовывать Интерфейсы?
    • Как создавать и использовать сигналы
    • Как пользователи могут злоупотреблять сигналами (и почему некоторые думают что это хорошо)
  • V. Об инструментах
    • Об инструментах
  • GTK 4
    • GtkApplication и GtkApplicationWindow
    • Widgets
Powered by GitBook
On this page

Was this helpful?

  1. Динамическая система типов Glib

Введение

Тип, которым манипулирует система типов Glib, намного более общий, чем тот который обычно подразумевается как объектный тип (Object type). Это лучше всего демонстрирует ниже показанная структура и функции используемые для регистрации типа в системе типов.

typedef struct _GTypeInfo               GTypeInfo;
struct _GTypeInfo
{
  /* interface types, classed types, instantiated types */
  guint16                class_size;
  
  GBaseInitFunc          base_init;
  GBaseFinalizeFunc      base_finalize;
  
  /* classed types, instantiated types */
  GClassInitFunc         class_init;
  GClassFinalizeFunc     class_finalize;
  gconstpointer          class_data;
  
  /* instantiated types */
  guint16                instance_size;
  guint16                n_preallocs;
  GInstanceInitFunc      instance_init;
  
  /* value handling */
  const GTypeValueTable *value_table;
};
GType g_type_register_static (GType             parent_type,
                              const gchar      *type_name,
                              const GTypeInfo  *info,
                              GTypeFlags        flags);
GType g_type_register_fundamental (GType                       type_id,
                                   const gchar                *type_name,
                                   const GTypeInfo            *info,
                                   const GTypeFundamentalInfo *finfo,
                                   GTypeFlags                  flags);

Базовые и небазовые типы данных определяют:

PreviousТипы данных и программированиеNextФункции копирования

Last updated 6 years ago

Was this helpful?

и являются C функциями, определёнными в gtype.h и реализованными в gtype.c которые вы должны использовать для регистрации новых в программной системе типов. Маловероятно что вам потребуется использовать (вы должны бить Tim Janik, чтобы делать это) но если вам это нужно, последний раздел разъясняет как создаются новые базовые типы данных. []

Базовые типы данных являются высшим уровнем типов которые не происходят от других типов в то время как обычные типы происходят из других типов. После инициализации , система типов не только инициализирует внутренние сструктуры данных, но и регистрирует множество основных типов: некоторые из них являются базовыми типами данных. Остальные являются типами полученными из этих базовых типов.

размер класса: поле class_size в .

функции инициализации класса (C++ конструктор): поля base_init и class_init в .

функции уничтожения класса (C++ деструктор): поля base_finalize и class_finalize в .

размер экземпляра (C++ параметр нового): поле instance_size в .

instanciation policy (C++ тип нового оператора): поле n_preallocs в .

функции копирования (C++ операторы копирования): поле value_table в .

флаги характеризующие тип: .

Базовые типы данных определяются так же набором которые хранятся в . Небазовые типы кроме всего прочего определяются их родителем, который помещается как параметр parent_type в и .

g_type_register_static
g_type_register_fundamental
GType
g_type_register_fundamental
2
g_type_init
GTypeInfo
GTypeInfo
GTypeInfo
GTypeInfo
GTypeInfo
GTypeInfo
GTypeFlags
GTypeFundamentalFlags
GTypeFundamentalInfo
g_type_register_static
g_type_register_dynamic