カウンタ〜その1〜

その2があるかは不明ですが…。
行き詰まったのでちょっとまとめてみた。


<概要>

・保持している値に対して、加算、減算の処理を行う


<機能>

・一定の値の増減処理(インクリメントやデクリメント)
・ある一定の値になった時の処理(上限値や下限値の設定)


<使用方法>

・必要な機能だけを抜粋して、使用する

例)
・インクリメントだけを行うカウンター(増加処理)
・0〜100の間で増減を行う(上限値+下限値)
・0から始まり、20まで2ずつカウントする(上限値+増加処理)


<使用例>

●基本的な処理

counter<int>	money(0);
money += 500;	// 加算したり
money -= 300;	// 減算したり

●加算、減算

counter<int, increment, decrement>	bird_count(0)
bird_count.get_increment().value(1);
bird_count.get_decrement().value(1);

bird_count.increment();		// +1
bird_count.decrement();		// -1


こんな感じ。
必要に応じて機能を定義して使う汎用カウンターライブラリ。
(ライブラリと呼べるほど多機能じゃない気がするけど)


根本的な意味でやりたい事は、例えば0〜100の間で増減する事を保証してくれたり、
100になった時に0に戻ってくれたりする機能を持ったカウンターが欲しかったところにある。
いちいちif文を書いてチェックするのはバグの元なのでそれを全部押し付けてしまおうと言う魂胆。
地味だけど結構、強力なんじゃないか?とか思ってみたりしてみたり。
肝は、テンプレート使って必要な機能を抜粋して組み合わせる所なんだけどもなかなかいい方法が思いつかない。
今のところ、ポリシーを多重継承しようかと思ってるけどまだコードを書いてないのでまだなんとも。
今更だけどboostにこんなライブラリってあるのかな?