Creating a coroutine generator type for sequences of values
In the previous recipe, we saw how to create a coroutine task that enables asynchronous computations. We used the co_await
operator to suspend execution until resumed and the co_return
keyword to complete execution and return a value. However, another keyword, co_yield
, also defines a function as a coroutine. It suspends the execution of the coroutine and returns a value. It enables a coroutine to return multiple values, one each time it is resumed. To support this feature, another type of coroutine is required. This type is called a generator. Conceptually, it’s like a stream that produces a sequence of values of type T
in a lazy manner (when iterated). In this recipe, we will see how we can implement a simple generator.
Getting ready
The goal of this recipe is to create a generator coroutine type that enables us to write code like the following:
generator<int> iota(int start = 0, int step = 1) noexcept...