I have a small program where a gtk signal callback function needs 2 or 3 variables.
I don’t want to make these global variables (The entire goal of the project is to be neat and tidy) and I don’t want to make a whole struct just so I can send a widget and a compiled regex to a function.
As far as I’ve seen g_signal_connect only allows for a single data variable.
Would the most efficient way of doing this perhaps be an array of void pointers to the two objects in question? Something like this?
void * data[2];
data[0] = widget;
data[1] = compiledregex;
g_signal_connect(save,"clicked",G_CALLBACK(callbackfunction),data);
Of course you can use arrays of void pointers, but if you want to pass around values with different types (especially values whose type is longer than
sizeof(void *)), you can’t use arrays. For these, you’ll almost certainly want to wrap them in a struct and pass the struct’s address as the data parameter.Example:
Of course, don’t forget to
free(data)in the callback function (assuming it’s for single use).Edit: as you wanted an example with void **, here you are (this is ugly, and I don’t recommend you to use this — either because allocating a one-element array for primitive types is wasting your shoot or because casting a non-pointer to void * is bad practice…):
To free them: