提问人:Jan Schultke 提问时间:9/13/2023 更新时间:9/13/2023 访问量:129
何时应使 co_await 运算符重载?
When should I overload the co_await operator?
问:
我最近发现以下代码是合法的:
struct S {
void operator co_await();
};
为什么是超载运算符?我为什么要重载它,这样做的惯用方法是什么?co_await
关于 couroutines 的 cppreference 文章提到,如果不存在运算符,则等待者可以按原样等待,因此它似乎是可选的。co_await
答:
1赞
Nicol Bolas
9/13/2023
#1
假设您有一个对象,该对象已被其他人指定为可等待对象。你希望你的对象是可等待的,但你要对 await 机制所做的就是将这些调用直接转发到这个内部存储的对象。出于各种原因,您不希望从给定的 awaitable 类继承。
所以你重载 ,这样你就返回了对这个 awaitable 的引用。该对象是具有所有 await 调用的对象;你只是一个中间人。operator co_await
上一个:LLVM 指针取消引用
评论