学习C++协程:
C++协程TS已并入C++20,VS2017或2019暂不完全支持协程,使用头文件experimental/coroutine
及命名空间std::experimental
。支持协程则替换为使用头文件coroutine
及命名空间std
即可。
注意,VS2017或2019需添加命令行选项/await
,不然会出现类似message : Please use '/await' command-line option to enable relevant extensions
的东西。
#include <experimental/coroutine>
#include <iostream>
template <typename Ty>
class generator {
public:
template <typename Ty>
struct promise_type_;
using promise_type = promise_type_<Ty>;
using handle_type = std::experimental::coroutine_handle<promise_type>;
template <typename Ty>
struct promise_type_ {
generator get_return_object() {
return generator{
handle_type::from_promise(*this)};
}
static generator get_return_object_on_allocation_failure() {
return generator{
nullptr};
}
auto initial_suspend() {
return std::experimental::suspend_always{
}