註冊 GLib.Value 的型別

在前面的示例中,Value.strdup_contents 將 GLib.DateTime 列印為指標地址。你可以註冊將值轉換為所需型別的函式。首先,建立一個具有簽名的函式 :

static void datetime_to_string (Value src_value, ref Value dest_value) {
    DateTime dt = (DateTime)src_value;
    dest_value.set_string (dt.to_string());
}

然後使用 Value.register_transform_func 註冊此函式 :

Value.register_transform_func (typeof (DateTime), typeof (string), datetime_to_string);

現在 GObject 可以將任何 DateTime 物件轉換為字串值。

完整的例子:

static void datetime_to_string (Value src_value, ref Value dest_value) {
    DateTime dt = (DateTime)src_value;
    dest_value.set_string (dt.to_string());
}

static void print_value (Value val) {
    print ("value-type : %s\n", val.type().name());
    print ("value-content : %s\n\n", val.strdup_contents());
}

public static void main (string[] args) {
    print_value (new DateTime.now_local());
    Value.register_transform_func (typeof (DateTime), typeof (string), datetime_to_string);
    print_value (new DateTime.now_local());
}
value-type : GDateTime
value-content : ((GDateTime*) 0x560337def040)

value-type : GDateTime
value-content : 2017-04-20T18:40:20+0200