我有一个 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 )的缺点。如果这是一个问题,我仍然强烈建议重构。Bg_object_new