在glib库中我不明白为什么struct _GValue的union数据[2]有2个元素?

时间:2016-01-21 10:26:44

标签: c gtk glib

根据struct _GValue如下:

struct _GValue
{
  /*< private >*/
  GType     g_type;

  /* public for GTypeValueTable methods */
  union {
    gint    v_int;
    guint   v_uint;
    glong   v_long;
    gulong  v_ulong;
    gint64      v_int64;
    guint64     v_uint64;
    gfloat  v_float;
    gdouble v_double;
    gpointer    v_pointer;
  } data[2];
};

第一期:

为什么有2个元素数据? data [0]表示g_type的值,但data [1]存储了什么?我不明白为什么数据[2]有2个元素?

第二期:

在联合数据[2]中,此v_pointer存储除基础类型之外的其他类型,如G_TYPE_INT,G_TYPE_LONG等。从v_int到v_double它们存储基础类型的值,如果g_type不是基础类型数据[0]使用哪种类型存储其类型的值?所以我猜它使用v_pointer来存储该值的指针。我不知道我是否理解原则问题是否正确?

如果有人对我有任何想法,请提前谢谢。

1 个答案:

答案 0 :(得分:1)

gobject / gvalue.h中的评论,

OnClientClick='<%# "Download(" +Eval("ID") + " );" %>'

根据当前的实现,data [1]存储GValue对象的属性/状态。并且对于适合指针的值内容,例如对象或字符串,使用data [0] .v_pointer。但是用户不能对数据的存储方式做出任何假设,将来可能会改变。