GObject参考手册(5)--不可实例和不可类化的类型:基础类型

本文引用自http://imtx.cn,原文作者:TualatriX 

 

译者TualatriX注: GLib中的基础类型,如gchar,gint都是从char,int用typedef定义来的。但是仅仅是如此吗?

原来不是。它们还得注册在GLib的类型系统中,并由g_value来实现相关功能。现在看这些还云里雾里的,慢慢琢磨。

原文:http://library.gnome.org/devel/gobject/2.14/gtype-non-instantiable.html

在类型系统中,许多类型是不可实例化而且没有父类的。大多数这些类型是最基础的基本类型,如gchar,它由g_value_types_init注册(在gvaluetypes.c中)。

如果想在类型系统中注册这样一个类型,你仅仅需要用0来填充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);

使用不可实例的类型似乎是无用的:定义一个不能实例化的类型有什么好处呢?大多数这种类型与GValue用作一块:一个GValue由一个整型或一个字符串来初始化,再被传递了一个已注册类型的value_table。GValue(以基本类型延伸)最有用的时候是在与对象的属性和信号用在一块时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值