This commit is contained in:
Zengtudor 2025-07-17 10:20:53 +08:00
parent de75f61cd3
commit 8a9d4aa7b3

View File

@ -1,6 +1,7 @@
#include <coroutine>
#include <iostream>
#include <stdexcept>
#include <string>
#include <type_traits>
template<class T>
@ -11,8 +12,20 @@ struct coroutine: std::coroutine_handle<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>
struct Promise{
Promise():raii("in promise"){};
RAII raii;
auto initial_suspend(){
std::cout<<__FUNCTION__<<'\n';
return std::suspend_always{};
@ -37,11 +50,13 @@ struct Promise{
std::cout<<__FUNCTION__<<' '<<t<<'\n';
return std::suspend_always{};
}
coroutine<T> h;
};
coroutine<int> test(){
RAII raii("in test");
std::cout<<"testing\n";
co_yield 1;
co_yield 2;
@ -56,4 +71,5 @@ int main(){
handle.resume();
std::cout<<__FUNCTION__<<'\n';
}
handle.destroy();//如果不destroy()那么~RAII in promise将不会显示也不能将destroy()交给~Promise()管理,也不会~RAII in promise
}