オブジェクトを作成するためのファクトリ関数を実装したいと考えています。私のオブジェクト テンプレートは次のようになります。
template <typename TA, typename TB>
struct MyImpl : public MyInterface
{
// content
};
私の工場は次のようなものです:
MyInterface* factory(char ta, char tb)
{
if(ta == 'c' && tb == 'c')
{
return new MyImpl<char, char>();
}
if(ta == 'c' && tb == 's')
{
return new MyImpl<char, short>();
}
if(ta == 's' && tb == 'c')
{
return new MyImpl<short, char>();
}
// and so on ....
}
ファクトリ関数は、コンパイル時に決定できなかった非静的 char データ ( ta
, tb
) を受け入れる必要があります。それがこのファクトリの要点だと思います。実際、ta
とtb
はファイル (またはネットワーク) から読み取られます。
煩わしい 2 レベルの切り替えを避けるための、よりシンプルなソリューションが必要です。
私の質問は、静的パラメーターを使用できないことを除いて、how-would-one-write-a-meta-if-else-if-in-c に似ていると思います。
おそらく、C マクロにフォールバックし、いくつかのマクロ トリックを使用して現在のコードを縮小する必要がありますか?
前もって感謝します!
アップデート
@ロブへの回答:
私の実際のコードは、その中に他の多くのものがあるとより複雑になり、読みにくくなり、多くの面で関連しなくなります。私は疑似コードを正しく取得しようとしています。問題がある場合は、親切にお知らせください:-)。
@Dyngussへの回答:
私の問題は、実際の実装では、ファクトリのパラメーター (ta、tb) の範囲が大きく、10 X ta と 20 X tb のようになり、ta と tb の組み合わせが非常に長くなり、保守が困難になることです。 . したがって、組み合わせ作業を軽減するために少なくとも何らかの方法が必要です。