I'd like to create a function "lazy" which accepts a function with an undetermined number of arguments as parameter. What type do I need or which casts have to be done?
Then I want to execute that thing later in function "evaluate". How do I then pass the arguments I passed before to the "lazy" function to the passed function pointer?
Some code to illustrate my problem:
char *function_I_want_to_call(void *foo, type bar, ...);
// the arguments are unknown to lazy() and evaluate()
typedef struct {
??? func;
va_list args;
} lazy_fcall;
void lazy(lazy_fcall *result, ??? func, ...) {
// which type do I need here?
va_start(result->_args, fund);
result->func = func;
}
void *evaluate(lazy_fcall *to_evaluate) {
return to_evaluate->func(expand_args(to_evaluate->args));
// what do I have to write there to expand the va_list? It's C, not C++11...
}
int main () {
lazy_fcall lazy_store;
lazy(&lazy_store, function_I_want_to_call, "argument_1", "argument_2");
// ...
printf("%s", (char *)evaluate(&lazy_store));
}
Or is something like this just impossible? Which other possibilities exist?