Federico: the combination of a "*priv" field and GObject private data is the best way to go:
struct _PangoFcFont
{
...
gpointer priv;
...
};
#define PANGO_FC_FONT_GET_PRIVATE(obj) ((PangoFcFontPrivate *) ((PangoFcFont *) obj)->priv)
static void
pango_fc_font_class_init (PangoFcFontClass *class)
{
...
g_type_class_add_private (object_class, sizeof (PangoFcFontPrivate));
}
static void
pango_fc_font_init (PangoFcFont *fcfont)
{
fcfont->priv = G_TYPE_INSTANCE_GET_PRIVATE (fcfont, PANGO_TYPE_FC_FONT, PangoFcFontPrivate)
}
Indeed, that's why g_type_get_private()
was
added.
You get the best of both worlds - the convenience of a priv pointer with
the fact that the private data is allocated in the same chunk as the
object itself, without the inefficiency of calling get_private()
a lot
or the extra static variable in Owen's
original proposal.