[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...