我有一个 GObject“A”,它在其构造函数中创建另一个 GObject“B”的实例。
“B”对象需要传递几个仅构造属性。现在,当创建对象“A”的实例时,我希望允许通过对象“A”的构造函数将这些属性的值传递给对象“B”的构造函数。
我发现这样做的唯一方法是为对象“A”创建相同的属性并将它们的值传递给“B”的构造函数。这些属性对“A”没有进一步的意义,所以这看起来像是一个杂物。
有没有更好的方法来做我想做的事?
A
自B
. 然后自动A
拥有所有B
的属性。A
,而是将B
的属性(或者更好的是,已经构造的B
对象)作为参数传递给A
的构造函数。B
直到A
可以弄清楚它需要如何配置B
。添加一个私有标志或其他东西A
,b_initialized
告诉您A
的内部指针B
是否有效。关于第二个建议的更多说明:
A
的东西是在宏a_init()
提供的函数中构造的。G_DEFINE_TYPE()
但这不是您获得A
. 通常编写一个函数,它是 的公共接口的一部分A
,如下所示:
A *a_new()
{
return (A *)g_object_new(TYPE_A, NULL);
}
您可以轻松地扩展它以包含其他参数:
A *a_new(int b_param_1, int b_param_2)
{
A *a = (A *)g_object_new(TYPE_A, NULL);
a->priv->b = b_new(b_param_1, b_param_2);
return a;
}
如果您使用 构造它,例如,如果您尝试从 GtkBuilder 文件构建它,这具有使您的A
对象处于无效状态(即,没有 a )的缺点。如果这是一个问题,我仍然强烈建议重构。B
g_object_new