>>779
>トグルした後に長い処理
その長い処理を関数にすればいいだけじゃないの? それをオーバーライド
してる関数2つに入れればいい。

>bool toggle(const int& i=-1) {
>   if (i<0) elem = !elem; else elem = (bool)i;
>   return elem;
>  }

「引数が指定されれば」という条件はソース書いてる時点で静的に判定
できる条件のはずなのにそれをわざわざ動的に判断する条件に読み替え
ようとしているようで気持ち悪いのだけど。