update
This commit is contained in:
parent
de75f61cd3
commit
8a9d4aa7b3
@ -1,6 +1,7 @@
|
|||||||
#include <coroutine>
|
#include <coroutine>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
#include <string>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
@ -11,8 +12,20 @@ struct coroutine: std::coroutine_handle<Promise<T>>{
|
|||||||
using promise_type = ::Promise<T>;
|
using promise_type = ::Promise<T>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct RAII{
|
||||||
|
std::string name;
|
||||||
|
RAII(const std::string &s):name(s){
|
||||||
|
std::cout<<__FUNCTION__<<" "<<s<<'\n';
|
||||||
|
}
|
||||||
|
~RAII(){
|
||||||
|
std::cout<<__FUNCTION__<<" "<<name<<'\n';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template<class T=void>
|
template<class T=void>
|
||||||
struct Promise{
|
struct Promise{
|
||||||
|
Promise():raii("in promise"){};
|
||||||
|
RAII raii;
|
||||||
auto initial_suspend(){
|
auto initial_suspend(){
|
||||||
std::cout<<__FUNCTION__<<'\n';
|
std::cout<<__FUNCTION__<<'\n';
|
||||||
return std::suspend_always{};
|
return std::suspend_always{};
|
||||||
@ -37,11 +50,13 @@ struct Promise{
|
|||||||
std::cout<<__FUNCTION__<<' '<<t<<'\n';
|
std::cout<<__FUNCTION__<<' '<<t<<'\n';
|
||||||
return std::suspend_always{};
|
return std::suspend_always{};
|
||||||
}
|
}
|
||||||
|
|
||||||
coroutine<T> h;
|
coroutine<T> h;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
coroutine<int> test(){
|
coroutine<int> test(){
|
||||||
|
RAII raii("in test");
|
||||||
std::cout<<"testing\n";
|
std::cout<<"testing\n";
|
||||||
co_yield 1;
|
co_yield 1;
|
||||||
co_yield 2;
|
co_yield 2;
|
||||||
@ -56,4 +71,5 @@ int main(){
|
|||||||
handle.resume();
|
handle.resume();
|
||||||
std::cout<<__FUNCTION__<<'\n';
|
std::cout<<__FUNCTION__<<'\n';
|
||||||
}
|
}
|
||||||
|
handle.destroy();//如果不destroy()那么~RAII in promise将不会显示,也不能将destroy()交给~Promise()管理,也不会~RAII in promise
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user