[英]Removing the void specializations for std::future and std::promise
關於描述刪除 std::future 和 std::promise P0241R0 的無效特化的論文。 這可能是一個愚蠢的問題,但建議的解決方案是完全刪除 void 特化,但是當人們想要實例化std::future<void>
對象時,他們期望做什么?
如參考文獻中所述, 如果void
是常規類型,這將是可能的。
void get_value() {
void x;
return x;
}
這是它在其他一些語言中的工作方式,因此並非沒有先例。 在其他語言中,它被稱為“單位”類型,因為它只有一個可能的值。 (其他語言也有“null”類型,它沒有可能的值,所以如果你嘗試創建一個,你會得到一個錯誤。它被命名為“null”,但它與空指針無關。)
在修改了 TS 的實現之后,如果實現使用 enable_if 做了一些聰明的事情,似乎可以避免專門用於 void,例如
template <class R>
R future<R>::get()
{
return shared().get();
}
template <class R>
class shared_state {
...
R get()
{
wait();
if constexpr (!std::is_same_v<V, void>) {
return *_value;
}
}
template <typename V = value_t, std::enable_if_t<!std::is_same_v<V, void>, V>* = nullptr>
void set_value(const V& value)
{
...
}
template <typename V = value_t, std::enable_if_t<std::is_same_v<V, void>, V>* = nullptr>
void set_value()
{
...
}
}
std::future 的目的是知道一個沒有實際返回值的進程何時結束。 所以基本上它是一個同步工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.