C++承诺/未来:从函数返回哪个?

Sco*_*t M 12 c++ future promise c++11

我有一个函数返回对std :: promise的引用:

std::shared_ptr<std::promise<void>> play();
Run Code Online (Sandbox Code Playgroud)

(更多信息:该功能在某些设备上播放媒体,返回值表示此播放完成时.如果第二次调用播放,则会在第一次返回的承诺上设置一个值,并创建一个新的承诺,返回第二次电话)

然后调用者可以捕获值并等待未来:

auto this_future = play()->get_future();
this_future.wait();
Run Code Online (Sandbox Code Playgroud)

返回对promise的引用是否有意义,或者我应该返回未来,以便调用函数不必调用get_future()?

Naw*_*waz 10

由于实行play()不是贴,我会说最有可能的,你应该返回未来,该功能应与承诺本身,最有可能在不同的线程工作.这种设计的基本原理源于这样一个事实,即promise是生产者端,而future是消费者端 - 因此函数会产生一个值,通过promise实例设置它,这将通知未来结果已经到来get.

但是,请注意,您不必返回std::shared_ptr<std::future<T>>- 只会std::future<T>很好.