組み込みで、デバイスドライバを作っていると一時的にデバイスのレジスタを書き換えて処理をしたいと思うことがある。
例えば割り込みを禁止するとか。で、そんなときに
template<typename T> class TemporaryValue {
private:
T& place;
T original;
public:
TemporaryValue(T& t, T v) : place(t) {
original = place;
t = v;
}
~TemporaryValue() {
place = original;
}
};
こんなのがあると便利だと思った。
要するに、ある関数の中で一時的にある変数(として扱うことができるもの)を書き換えてしまい、その関数から抜けるときに自動的に元の値に戻してくれるような。
結構値の戻し忘れってあるし、これならデストラクタで値を復帰してくれるので任意の箇所でreturnできるから便利だと思うんだけどな。
すでにSTLとかBoostに同様な物があるのに知らないだけなのかな。
実際に使用するためには=オペレータを追加したり任意のタイミングで元に戻すメソッドも必要でしょうけどね。
※最近C++でソースを書くことがめっきり無いので、コードへの突っ込みは構いませんがあまり苛めないで下さい。