基本的な処理はほとんど共通なんだけど、所々でタイプごとに異なる処理を行う必要がある・・・なコードを考える。Javaの場合はポリモーフィズム使えば大概は上手くまとめられるのだが、Cではそうもいかない。
率直にかけば
do() { 共通処理1(); if (type == A) { } else if (type ==B) { } else {...} 共通処理2(); if (type == A) { } else if (type ==B) { } else {...} }
enumとswitchでも似たり寄ったり。同じif文が並ぶのがどうにも気持ち悪い。
そこで、if文を一箇所に出来ないものかと考え、
do() { if (type == A) { doA(); } else if (type == B) { doB(); } }
とすれば、タイプ判別のif文は一箇所になるが・・・お察しの通り各タイプ別の関数は共通処理の部分はぜんぶ同じなため、コピペまがいのコードになる。
Cではこういうケースを完全に上手く扱う方法は無い・・・のかな?基本的には前者のケースのほうがコード量も少なくなるしスマートなやり方かなぁと。if分岐するコードが色んなところに散らばらなければ、オッケーかなぁ。