デジタルちんぶろぐ

デジタルな話題

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  268  : 記事  0  : コメント  4419  : トラックバック  79

ニュース


技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

組み込みで、デバイスドライバを作っていると一時的にデバイスのレジスタを書き換えて処理をしたいと思うことがある。

例えば割り込みを禁止するとか。で、そんなときに

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++でソースを書くことがめっきり無いので、コードへの突っ込みは構いませんがあまり苛めないで下さい。

 

投稿日時 : 2006年12月15日 0:18

コメント

# re: 一時的に書き換えたい 2006/12/15 9:31 かずくん
これ、S氏のプログラミング言語C++第3版に、ご大層な名前を付けたイディオムとして、掲載されてた用な希ガス。>ぷりーず。識者のかた。

# re: 一時的に書き換えたい 2006/12/16 0:09 スーパーあんどちん
>>かずくんさん
あ、やっぱり出てましたか。第3版は持ってないんですよ。というか「プログラミング言語C++」はまだきちんと読んだ事が無いです。肝心な物を読んでいないと自分の無知を晒す羽目になりますね。


Post Feedback

タイトル
名前
Url:
コメント: