我有一个返回std::promise引用的函数:
std::shared_ptr<std::promise<void>> play();
更多信息:该函数在某个设备上播放媒体,返回值表示播放是否完成。如果第二次调用play,则会在返回的第一个promise上设置一个值,并为此第二次调用创建并返回一个新的promise。
调用者可以捕获该值并等待未来的到来:
auto this_future = play()->get_future();
this_future.wait();
将 Promise 的引用返回,还是应该返回 Future,这样调用函数就不必调用 get_future()?
std::vector<std::future<T>>
,你也可以使用std::move
来移动 futures。 - Nawazstd::future
的无复制前提意味着只有一个消费者应该拥有它并认为他们有权从中获取.get()
。使用std::shared_ptr<std::future<X>>
,你在说“多个客户端拥有这个future
的平等所有权”。这是代码异味。同样,std::promise<X>
应该由数据的生产者唯一拥有:拥有共享所有权的两个代码片段意味着两者都有权设置其值(或读取其未来)。play()
应该返回std::future<void>
。内部可以保留一个std::promise<void> old_promise
。 - Yakk - Adam Nevraumont