如何将std :: future <T>转换为std :: future <void>?

Jar*_*ock 7 c++ asynchronous future c++11

我有一种情况,我有一个std::future<some_type>调用API A,但需要提供API B与std::future<void>:

std::future<some_type> api_a();

void api_b(std::future<void>& depend_on_this_event);
Run Code Online (Sandbox Code Playgroud)

如果没有提议的功能,例如.then()when_all(),是否有任何有效的方法可以抛弃附加到a的值std::future<T>,只留下std::future<void>表示事件完成的底层?

像下面这样的东西可以工作,但可能效率低下:

auto f = api_a();
f.wait();
auto void_f = std::async(std::launch::defer, []{});
api_b(void_f);
Run Code Online (Sandbox Code Playgroud)

sba*_*bbi 9

你可以得到的最好的可能是:

auto f = api_a();
auto void_f = std::async(std::launch::deferred,[fut = std::move(f)]{ fut.wait();});
api_b(void_f);
Run Code Online (Sandbox Code Playgroud)