8得票2回答
为什么模板不会丢弃co_return?

我希望能够创建一个既有同步版本又有协程版本的函数,而不使用模板特化,即使用 if constexpr。 这是我编写的函数: template <Async _a> AsyncResult<int, _a> func(int a) { if constexpr (...

8得票1回答
同时使用cppcoro和ASIO的co_spawn

我有一个使用 cppcoro 写的库,希望在ASIO中使用它。但每当我尝试从该库co_spawn一个协程时,Boost都会抱怨可等待类型不正确。 例如: #include <asio/io_context.hpp> #include <asio/coroutine.hpp...

8得票1回答
多层嵌套协程的暂停

我试图理解C++20中新协程的工作原理,但除了非常简单的示例外,我无法使其正常工作。 我的目标是创建深层嵌套函数,允许最内部的函数中断并将控制返回给最外部代码,在某些条件下,它会将控制权交回给这个内部函数。 这类似于使用setjmp和longjmp。 我使用在网络上找到的一些示例糟糕地编写...

8得票1回答
clang-11通过-fcoroutines标志调用<coroutine>头文件吗?

我正在尝试使用以下命令编译一个使用 coroutine 库的 .cpp 文件。 clang-11 -std=c++20 -stdlib=libstdc++ main.cpp 我得到了这样的错误: /usr/lib/gcc/x86_64-linux-gnu/10/../../../.....

8得票1回答
Clang对C++20协程的支持现状如何?

根据cppreference.com(https://en.cppreference.com/w/cpp/compiler_support#C.2B.2B20_features),自版本8起,Clang部分支持C++20协程: 然而,如果在Clang trunk(即即将推出的版本13中)...

7得票1回答
“使用无栈协程时,只有顶层例程可以被挂起。”的意思是什么?

我在这里找到了这个陈述。起初,我很惊讶,因为我认为这使得无栈协程几乎没有用处(而C++协程TS是无栈的)。所以我写了一个演示(在使用C++协程TS的Visual Studio中): #include&lt;experimental/coroutine&gt; #include&lt;iost...

7得票1回答
如何在可等待对象中更改执行程序(executor)?(asio库相关问题)

我已经阅读了这个问题并尝试使用以下代码复制答案: #include &lt;iostream&gt; #include &lt;syncstream&gt; #include &lt;thread&gt; #include &lt;coroutine&gt; #include &lt;boo...

7得票2回答
关于MSVC std::experimental::generator中暂停-恢复数据丢失的问题

自从 std::generator 成为 CPP23 的一部分,我就开始玩弄 MSVC 的不完整版本。但是,我注意到当与 std::views::take 一起使用时,似乎会丢失一个 yield。以下是示例: #include &lt;iostream&gt; #include &lt;ra...

7得票1回答
在catch子句中使用co_await是否可行?

以下代码: try { throw 42; } catch (int i) { co_await somefuture; } 使用 -fcoroutines-ts 编译可以在 clang 6 和 7 上编译成功。然而,使用 /await 在 Visual C++ 15(2017)...

7得票1回答
何时使用协程而不是迭代器?

假设我有一些数据,我想“逐个提供”这些数据。由于数据量很大,所以只有在需要时才会提供一条数据(以节省内存)。因此,我不能将整个数据存储在 std::vector 中。 如今,我可以使用迭代器来实现此功能,因为它们自然适合这种要求。但是,我也可以使用协程(目前使用 Coroutines TS)...