[英]Conditional std::future and std::async
我需要做条件行为。
std::future<int> f = pointer ? std::async(&Class::method, ptr) : 0;
// ... Some code
x = f.get();
所以我想将ptr->method()
调用的x结果异步结果分配给x,如果ptr
是nullptr
,则分配为0。
上面的代码可以吗? 我可以这样做吗(将'int'分配给'std :: futture'?或者也许有更好的解决方案?
std::future
没有转换构造函数,因此您的代码无效(如您实际上已尝试编译代码那样,您会注意到)。
您可以在不使用如下线程的情况下将值加载到将来:
std::future<int> f;
if ( pointer )
f = std::async(&Class::method, ptr);
else
{
std::promise<int> p;
p.set_value(0);
f = p.get_future();
}
// ... Some code
x = f.get();
但是,实现相同目标的一种更简单的方法是:
std::future<int> f;
if ( pointer )
f = std::async(&Class::method, ptr);
// ... Some code
x = f.valid() ? f.get() : 0;
您还可以为其他情况返回std::future
(使用其他策略):
std::future<int> f = pointer
? std::async(&Class::method, ptr)
: std::async(std::launch::deferred, [](){ return 0;});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.