我需要做条件行为。
std::future<int> f = pointer ? std::async(&Class::method, ptr) : 0;
// ... Some code
x = f.get();
所以我想将 x 结果分配给 x ptr->method()
调用的异步结果,如果 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;});