今日は仕事でこんなクラスを作った。
class BOOLatOnce{
private:
bool flag;
public:
BOOLatOnce(){
flag = false;
}
explicit BOOLatOnce(const bool b){flag = b;}
BOOLatOnce& operator=(const bool b){flag = b;return *this;}
operator bool(){
//評価が行われたら自動でfalseに戻す。
bool b = flag;
flag = false;
return b;
}
};
こいつの使い方は簡単。
BOOLatOnce bat;
bat = true; // bat == true
if( bat ){ // ifの中はtrue
// ここではすでにbat == false
/* ... */
}
普通のboolと違い、一度評価されたら勝手にfalseに戻る。
ソースコードが食中毒にかかったかのようにスマートになること請け合いだ。
後でメンテナンスする人間(一月後の自分含む)が困惑する様子が目に浮かぶ。