日々夢想

つれづれなるままに ひぐらし すずりにむかいて 

「Cでオブジェクト指向プログラミングを行なえ」を読んだらポリモーフィズムの部分を関数ポインタですっきりさせたくなった

問.Cでオブジェクト指向プログラミングを行なえ - 株式会社CFlatの明後日スタイルのブログ
を読んだらポリモーフィズムの処理分岐部分をすっきりさせたくなった
構造体に関数ポインタを持たせて、クラスに応じて関数を設定すればいける。
こんなかんじで。

void PrintObject(Object obj)
{
  obj->printObj(obj->menber->m_obj);

  return;
}

こうすると、クラスが追加された場合、PrintObjectなどのメソッド部分に手を
入れる必要はないけど、クラスに応じた関数ポインタ設定処理なんかが複雑化してしまいますね。

後記

組み込みプログラマを数年やっていたのですが、
1つのH/Wモジュールに対して、構造体ポインタを設けて、
モジュール制御する各関数の引数に渡すってコードは結構見かけました。

あと、シリーズ展開しているH/Wの型番ごとに関数ポインタ持った構造体用意して、
イニシャライズ関数の引数で制御対象のH/W型番を指定しているのも見た事があります。
あれ、makefile中のオプションで、コンパイル対象のコードを切り替えてるんだったかな。
うろ覚え。