[026] 看 Code 說故事:Facebook Folly(三)- Optional
先前的 Lazy
其中一個特性是:運算式/資源只會被執行/索求一次。實作此特性用到了 Optional
,位置:
- folly/Optional.h
Lazy
實作 operator() 覆載函數如下:
result_type& operator()() {
if (!value_) value_ = func_();
return *value_;
}
value_
可被用來「判斷是否已給值(Function func_
evaluated or not)」,也可用來儲值 func_
的回傳值。
由此來看,Optional
可以讓原本的型別多了一種「供外界查詢是否已被賦值」的能力。先前有過類似的需求,用了「急就章」解法:以 int
代表三種狀態:
- 為 -1 表示值尚未被設定
- 為 0 表示 false
- 為 1 表示 true
一直不滿意這種作法,湊和著用。有機會可以來試試 Optional
...