On 2007-04-26, Ben Hutchings <[EMAIL PROTECTED]> wrote:
>> Umm... any kind of OO shit in C absolutely positively depends on
>> function pointer casts.
>
> I haven't noticed this being necessary in the GObject system. It does
> rely on data pointer casts, but those are fine.
G-shit just hides casts in A_ZILLION_AWFUL_MACROS_WITH_UNMANAGEABLE_NAMES.
Anyway, the _FooClass structures contain function pointers for the
pseudo-dynamic functions. The first parameter is of type Foo*. A
subclass Bar must fill these in. Obviously in the subclass's
implementation of these functions, the first parameter is Bar*.
Ion's _much_ more usable object system, on the other hand, uses
a table of mappings {dynfun, implementation}, so that it isn't
necessary to fill in complex hierarchies of structures: you just
list the functions that you do implement. It actually needs
_less_ explicit casts than the G-shit, because the function
pointers in the structure are of type void (*)(), which any
function 'returning' void can be implicitly cast to. Functions
that do not return a void, need (DynFun*) explicit casts, however.
Cast of 'void (*)(Bar*)' to 'void (*)(Foo*)' must always be explicit.
--
Tuomo