Function Macro
GObjectADD_PRIVATE
since: 2.38
Declaration [src]
#define G_ADD_PRIVATE (
TypeName
)
Description [src]
A convenience macro to ease adding private data to instances of a new type
in the _C_
section of G_DEFINE_TYPE_WITH_CODE() or G_DEFINE_ABSTRACT_TYPE_WITH_CODE().
For instance:
typedef struct _MyObject MyObject;
typedef struct _MyObjectClass MyObjectClass;
typedef struct {
gint foo;
gint bar;
} MyObjectPrivate;
G_DEFINE_TYPE_WITH_CODE (MyObject, my_object, G_TYPE_OBJECT,
G_ADD_PRIVATE (MyObject))
Will add MyObjectPrivate
as the private data to any instance of the
MyObject
type.
G_DEFINE_TYPE_*
macros will automatically create a private function
based on the arguments to this macro, which can be used to safely
retrieve the private data from an instance of the type; for instance:
gint
my_object_get_foo (MyObject *obj)
{
MyObjectPrivate *priv = my_object_get_instance_private (obj);
g_return_val_if_fail (MY_IS_OBJECT (obj), 0);
return priv->foo;
}
void
my_object_set_bar (MyObject *obj,
gint bar)
{
MyObjectPrivate *priv = my_object_get_instance_private (obj);
g_return_if_fail (MY_IS_OBJECT (obj));
if (priv->bar != bar)
priv->bar = bar;
}
Since GLib 2.72, the returned MyObjectPrivate
pointer is guaranteed to be
aligned to at least the alignment of the largest basic GLib type (typically
this is #guint64 or #gdouble). If you need larger alignment for an element in
the struct, you should allocate it on the heap (aligned), or arrange for your
MyObjectPrivate
struct to be appropriately padded.
Note that this macro can only be used together with the G_DEFINE_TYPE_*
macros, since it depends on variable names from those macros.
Also note that private structs added with these macros must have a struct
name of the form TypeNamePrivate
.
It is safe to call the _get_instance_private
function on NULL
or invalid
objects since it’s only adding an offset to the instance pointer. In that
case the returned pointer must not be dereferenced.
Available since: 2.38
This function is not directly available to language bindings.