function - Is there any way to perform something alike std::bind in C? -
so have function of type void (*actiononm)( void * mytypeinstance)
, need wrap , pass void (*action)()
. such thing possible in c?
you can translate (simple) c++ in c following rules :
- a c++ class becomes in c struct containing attributes (no methods)
- c++ methods c functions taking pointer object (here struct) first parameter
here data :
- a pointer function taking void * parameter , returning void
- a pointer parameter
but not pass pointer function pointer struct :
typedef struct _binder { void (*action)(void *param); void *param; } binder;
when want bind actiononm(&mytypeinstance)
:
binder *bind = malloc(sizeof(binder)); bind->action = &actiononm; bind->param = &mytypeinstance;
you can pass bound function single parameter bind
:
void otherfunct(binder *bind, int otherparam) { /* ... */ bind->action(bind->param); /* actual call bound function */ /* ... */ }
and later of course free(bind)
:-)
if want closer c++ way, define executor function :
void bind_call(binder *bind) { bind->action(bind->param); }
other function become :
void otherfunct(binder *bind, int otherparam) { /* ... */ bind_call(bind); /* actual call bound function */ /* ... */ }
Comments
Post a Comment