Home > front end >  Wrap Callback API into Coroutine-based Iterable
Wrap Callback API into Coroutine-based Iterable

Time:09-03

I want to warp a typical C callback API that generates multiple int values into an iterable in the fashion of std::generator<int> (see p2502r1).

API looks like:

typedef void (*Callback)(int);
void api(Callback callback) {
   callback(1);
   callback(2);
   callback(3);
}

The API wrapper should behave like:


for(int i : APIWrapper(&api)){
   std::cout << i << std::endl;
}

expected result:

1
2
3

I've been looking into this but couldn't figure out how to extend it accordingly:

I am looking for leads how to accomplish what is described above.

CodePudding user response:

What you want isn't really possible with co_await-style coroutines. To do this, you would need to be able to suspend within the callback such that it also suspends the api function as well. co_await-style coroutines can't do that.

  • Related