Re: Reference to a C++ object in GTK+ callbacks



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 12/14/2005 11:19 AM, Stephen Pollei wrote:
On 12/13/05, Daryl Lee <dlee altaregos com> wrote:

Are you sure that is the right style for that callback?
static void
rocket_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
       class city_node *city=static_cast<class city_node *>(data);
       global_game.rocket_up(*city);
       city->update_targets();
       each_tick(NULL);
}

C++ functions do, indeed, have to be "static" to be used as GTK+
callbacks.

Untrue I just removed the static keyword from 8 of my callbacks and
then recompiled, worked just fine. As Andy Grebe of apogeelabs said
"... function needs to have the correct format".
That I bet was the problem. That I label a lot of my callbacks with
"static", I just consider good style.
diff -u1 gtk_main.cc-save gtk_main.cc > static-out.diff

The only c++ problem I can see is if you had overloaded functions; I
can't think of how you'd select which one you meant.

IIRC, I believe the functions only have to be static in this case if
they're actually C++ class methods.  Plain old C global functions don't
need to be static, though if they're only used in that one module,
there's no reason *not* to make them static, and it's good practice to
do so.

        -brian

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (MingW32)

iD8DBQFDoHJ16XyW6VEeAnsRAiaqAJ0fCFNpf1k/+OSTqtxHUpDdKuD6QACfSkJT
3iqrkpsHfNp4+XzAnyLq+so=
=BnXm
-----END PGP SIGNATURE-----



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]