« 2007年7月1日 - 2007年7月7日 | トップページ | 2007年7月15日 - 2007年7月21日 »

2007年7月14日 (土)

C言語でAdapter

Adapterパターンは、あるものとあるものを繋ぐために間に何かをはさむパターン。

Adapterに関して言えば、オブジェクト指向言語より手続き型言語の方が一個関数を定義するだけなので、作りやすいと思う。

例えばmallocというメモリ領域を動的にとる関数が標準ライブラリで提供されているが、引数が確保したいバイト数になっている。そのため、int型を10個分確保したいときは、

int *array = malloc(sizeof(int) * 10);

の様に書かないといけないのでちょっと面倒だ。そこで、型と数の二つを引数で与えるとその分のメモリ領域を取れるようにしたいと思ったとする。

そのとき新たに関数を作ると、

  1. 一から関数を作るのは作るための労力がかかる
  2. もしもmallocが変わったときに対応する必要がでてくるかもしれない

Adapterパターンを使えば以上の問題に対応することができる。具体的には、

#define malloc2(type, number) (malloc(sizeof(type) * (number)))

という内部でmallocを使う新しい関数(マクロ)を作る。そうすると、

int *array = malloc2(int, 10);

のように望んでいた使い方ができる関数ができる。

| | コメント (0) | トラックバック (0)

« 2007年7月1日 - 2007年7月7日 | トップページ | 2007年7月15日 - 2007年7月21日 »