私のプログラムは次のように実行する必要があります。
./myprogram inputType [Can be I1, I2 or I3]
このプログラムのほとんどの機能は次のとおりです。
void Foo::foo (IType inputType) {
// Some common code
if (inputType == I1) ... // some I1 specific code
if (inputType == I2) ... // Some I2 specific code
...// similarly for I3
}
inputTypeのこれらのチェックは複数の場所に散在しており、時間の経過とともに管理がますます困難になっています。私はこのコードを次のようなものにリファクタリングすることを考えました:
InputType* iType = new InputTypeI1(); // or I2 or I3
void Foo::foo (IType inputType) {
// Some common code
iType.DoSomething(this, arg1, arg2,..)
}
class InputType1 : public InputType
{
// Virtual functions.. (with default implementations)
}
InputType1::DoSomething(Foo* f, Arg1* arg1, Arg2* arg2)
{
f->DoSomethingFor1(arg1, arg2);
}
これにより、I1、I2、またはI3の項目が整理され、入力タイプに基づいて関連する関数が自動的に呼び出されます。しかし、これはもっとうまくできると思います。助言がありますか?