以下のソースはある機能が利用可能かの状態を返す。一度だけ初期化するのでstaticとラムダ関数で行っている。
1 2 3 4 5 6 7 8 9 |
bool isSomethigAvailable() { static auto isAvailable = []() { if(time(nullptr)%2 == 0) return true; return false; }(); return isAvailable; } |
最初に呼ばれたときはラムダ関数を実行し、次からはstatic変数の値を返す。
ラムダ式
ラムダ式の戻り値はreturnから自動で推論される。この場合はboolになる。
スレッド
C++11でstatic変数のスレッドセーフが保証されたので、上記ラムダ式が2度動くことはない。