c++ - How to get a function pointer from lambda expressions or so? -
this question has answer here:
- passing lambda function pointer 5 answers
i have c language function called:
f_api(void(*callback)(int)) and have static class method callback:
struct { static void callback(int i) { a::count = i; } static count = 0; }; i can call function this:
f_api(&a::callback) however, have change callback non-static now, because have create multiple a objects.
but cannot change definition of f_api().
i tried using lambda:
f_api([this](int i)->void{this->count = i;})` but failed, because cannot convert lambda capture simple function pointer.
std::bind() cannot work, because of f_api() definition.
what can this? how can function pointer lambda expression? there method sidestep?
if cannot change c api don't think can situation. because c functions require information require passed in function parameters.
you can convert lambdas function pointers following
void (*ptr) () = []() {} lambdas without capture can implicitly converted function pointers. lambdas capture values cannot converted function pointers since have state (in form of member variables).
the usual way solve problem in c void* parameters. take @ pthread_create function. thread start function accepts function void* parameter points "context". context in situation can instance calling method on.
but if cannot change c api, afraid cannot regarding function pointers. thing can make variables global , use call methods in function pointer.
Comments
Post a Comment