Re: Quick question on Glib style/design
- From: muppet <scott asofyet org>
- To: gtk-devel-list gnome org
- Subject: Re: Quick question on Glib style/design
- Date: Tue, 3 Aug 2004 07:46:56 -0400
On Aug 3, 2004, at 1:43 AM, Ryan McDougall wrote:
I want MY functions to do the casting (which is unavoidable anyways),
but the dang compiler won't stop complaining!
won't stop complaining about what? in C, anything is valid where a
void* is wanted, so the compiler will accept this without complaint.
(this is not true in C++, IIRC.)
Is this a good idea? Clearly its not extensible to more involved
hierarchies since I'll have nothing but gpointers.
no, it's not a good idea. you've saved the programmer from needing to
cast something, but now you've made your API more obscure by hiding
what type your function really wants, and placed *more* burden on the
programmer, who now needs intimate knowledge of how your API works.
if what you want is really to save the programmer from casting, then in
C you'll need to use macros, e.g.:
/* don't try this at home */
void foo__bar (Foo * f);
#define foo_bar(f) foo__bar((Foo*)(f))
but this is also, in general, Not A Good Thing as you have totally
sidestepped the compiler's type checking. for example, image somebody
tries to pass a Flurble* to foo_bar() --- it will take quite a bit of
swimming through headers to find that it's the wrong type (even with
the void* declaration you described above), because the compiler will
not complain at all about the bad type.
if you have
void foo_bar (Foo * f);
and you want to pass a Bar* to it, you are instantly reminded that the
Bar needs to derive from a Foo. this is idiomatic to C and especially
to GLib.
--
"Ghostbusters" is the best movie of this decade.
-- Neal, circa 1996, referring to a movie released in 1984.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]