Неинстанциируемые не классифицированные базовые типы

Многие типы неиснстанциированы системой типов и не имеют класса. Большинство таких типов являются тривиальными базовыми типами такие как gchar, регистрируются g_value_types_initgvaluetypes.c).

Для регистрации таких типов в системе типов, вам нужно просто заполнить структуру GTypeInfo нулями, так как эти типы базовые:

GTypeInfo info = { 0, /* class_size */ NULL, /* base_init */ NULL, /* base_destroy */ NULL, /* class_init */ NULL, /* class_destroy */ NULL, /* class_data */ 0, /* instance_size */ 0, /* n_preallocs */ NULL, /* instance_init */ NULL, /* value_table */ }; static const GTypeValueTable value_table = { value_init_long0, /* value_init */ NULL, /* value_free */ value_copy_long0, /* value_copy */ NULL, /* value_peek_pointer */ "i", /* collect_format */ value_collect_int, /* collect_value */ "p", /* lcopy_format */ value_lcopy_char, /* lcopy_value */ }; info.value_table = &value_table; type = g_type_register_fundamental (G_TYPE_CHAR, "gchar", &info, &finfo, 0);

Наличие неинстанциированных типов может показаться немного бесполезным: что хорошего в типе если вы не можете инстанциировать экземпляр этого типа? Большинство этих типов используются вместе с GValues: GValue инициализируется целочисленным или строкой и размещается используя value_table зарегистрированного типа. GValues (и расширение тривиального базового типа) полезна когда используется вместе со свойствами объекта и сигналами.