![]() |
![]() |
![]() |
![]() |
Once the interface is defined, implementing it is rather trivial.
The first step is to define a normal final GObject class exactly as in the section called “Boilerplate header code”.
The second step is to implement MamanBaz by defining
it using
G_DEFINE_TYPE_WITH_CODE
and
G_IMPLEMENT_INTERFACE
instead of
G_DEFINE_TYPE
:
1 2 3 4 5 |
static void maman_ibaz_interface_init (MamanIbazInterface *iface); G_DEFINE_TYPE_WITH_CODE (MamanBar, maman_bar, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (MAMAN_TYPE_IBAZ, maman_ibaz_interface_init)) |
This definition is very much like all the similar functions seen
previously. The only interface-specific code present here is the use of
G_IMPLEMENT_INTERFACE
.
Classes can implement multiple interfaces by using multiple calls to
G_IMPLEMENT_INTERFACE
inside the call to
G_DEFINE_TYPE_WITH_CODE
maman_baz_interface_init
, the interface
initialization function: inside it every virtual method of the interface
must be assigned to its implementation:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
static void maman_baz_do_action (MamanBaz *self) { g_print ("Baz implementation of Ibaz interface Action: 0x%x.\n", self->instance_member); } static void maman_baz_do_something (MamanBaz *self) { g_print ("Baz implementation of Ibaz interface Something: 0x%x.\n", self->instance_member); } static void maman_ibaz_interface_init (MamanIbazInterface *iface) { iface->do_action = maman_baz_do_action; iface->do_something = maman_baz_do_something; } static void maman_baz_init (MamanBaz *self) { self->instance_member = 0xdeadbeef; } |