我专门指的是from_promise方法。

问题描述 投票:0回答:1
相似的问题

代码示例:

struct Foo { /* ... */ }; struct GenericPromise { std::suspend_always initial_suspend() noexcept { return {}; } std::suspend_always final_suspend() noexcept { return {}; } void return_void() {} void unhandled_exception() {} virtual ~GenericPromise() = default; }; struct Coroutine { std::coroutine_handle<GenericPromise> handle; struct promise_type : Foo, GenericPromise { Coroutine get_return_object() { return { std::coroutine_handle<GenericPromise>::from_promise(*this) }; } int AdditionalData = 42; }; }; Coroutine Coro() { co_return; } int main(int argc, char* argv[]) { Coroutine coro = Coro(); coro.handle.resume(); assert(coro.handle.done()); coro.handle.destroy(); } 该程序保证可以按预期工作,或者是通过不同类型的coroutine_handle访问潜在的错误/ub?

您可以保持给定的coroutine-要么用

std::coroutine_handle<>
(是
std::coroutine_handle<void>

)或通过

std:::coroutine_handle<PromiseType>
c++ std c++20 c++-coroutine
1个回答
0
投票
PromiseType

是您的coroutines的确切类型。

请参阅什么
coroutine_handle ::from_address
cppreference说:
如果ADDR既不是零指针值也不是Coroutine_handle的基础地址,则行为是不确定的。 
如果addr是std :: coroutine_handle的基础地址,则行为也是不确定的。

想象一下,Coroutine_handle只是

void*承诺对象的一些包装器。在没有Coroutine世界中 任何人 - 在您的情况下 - 我会考虑存储

P*
并指向您的“通用”基类:

void*

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.