C++20引入了协程,这是一种可以暂停和恢复执行的函数。以下是一个简单的C++协程例子:
cpp
#include <iostream>
#include <coroutine>
#include <future>
template<typename T>
struct Generator {
    struct promise_type;
    using handle_type = std::coroutine_handle<promise_type>;
    struct promise_type {
        T value;
        auto get_return_object() { return Generator{handle_type::from_promise(*this)}; }
        auto initial_suspend() { return std::suspend_always{}; }
免费模板生成器
        auto final_suspend() noexcept { return std::suspend_always{}; }
        void unhandled_exception() { std::terminate(); }
        void return_void() {}
        auto yield_value(T value) {
            this->value = value;
            return std::suspend_always{};
        }
    };
    bool move_next() { return !coro.done(); }
    T current_value() { return coro.promise().value; }
    Generator(Generator const&) = delete;
    Generator(Generator && rhs) : ) { = nullptr; }
    ~Generator() { if (coro) coro.destroy(); }
private:
    Generator(handle_type h) : coro(h) {}
    handle_type coro;
};
Generator<int> range(int start, int end) {
    for (int i = start; i < end; ++i) {
        co_yield i;
    }
}
int main() {
    auto gen = range(1, 5);
    while (ve_next()) {
        std::cout << gen.current_value() << std::endl;
    }
    return 0;
}
这个例子中,我们定义了一个名为Generator的模板类,用于创建生成器。我们还定义了一个名为range的生成器函数,它接受两个整数参数start和end,并使用co_yield关键字在这两
个整数之间生成一个序列。在main函数中,我们创建了一个range生成器实例,并使用move_next和current_value方法遍历生成的序列。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。