何时应使 co_await 运算符重载?

When should I overload the co_await operator?

提问人:Jan Schultke 提问时间:9/13/2023 更新时间:9/13/2023 访问量:129

问:

我最近发现以下代码是合法的:

struct S {
    void operator co_await();
};

为什么是超载运算符?我为什么要重载它,这样做的惯用方法是什么?co_await

关于 couroutines 的 cppreference 文章提到,如果不存在运算符,则等待者可以按原样等待,因此它似乎是可选的。co_await

C 运算符重载 ++20 语言设计 C++协程

评论


答:

1赞 Nicol Bolas 9/13/2023 #1

假设您有一个对象,该对象已被其他人指定为可等待对象。你希望你的对象是可等待的,但你要对 await 机制所做的就是将这些调用直接转发到这个内部存储的对象。出于各种原因,您不希望从给定的 awaitable 类继承。

所以你重载 ,这样你就返回了对这个 awaitable 的引用。该对象是具有所有 await 调用的对象;你只是一个中间人。operator co_await