gpt4 book ai didi

c++11 - 是否有一个packaged_task::set_exception等效项?

转载 作者:行者123 更新时间:2023-12-03 22:22:22 29 4
gpt4 key购买 nike

我的假设是packaged_task在下面有一个promise。如果我的任务抛出异常,如何将其路由到关联的future?只需输入promise,我就可以称为set_exception
-如何对packaged_task做同样的事情?

最佳答案

std::packaged_task具有关联的std::future对象,该对象将保存异常(或任务的结果)。您可以通过调用get_future() std::packaged_task 成员函数来检索该将来。

这意味着用throw与打包的任务相关联的函数中的异常足以使该异常被任务的将来捕获(并在对future对象调用get()时将其重新抛出)。

例如:

#include <thread>
#include <future>
#include <iostream>

int main()
{
std::packaged_task<void()> pt([] () {
std::cout << "Hello, ";
throw 42; // <== Just throw an exception...
});

// Retrieve the associated future...
auto f = pt.get_future();

// Start the task (here, in a separate thread)
std::thread t(std::move(pt));

try
{
// This will throw the exception originally thrown inside the
// packaged task's function...
f.get();
}
catch (int e)
{
// ...and here we have that exception
std::cout << e;
}

t.join();
}

关于c++11 - 是否有一个packaged_task::set_exception等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344663/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com