C++相談室 part20

このエントリーをはてなブックマークに追加
共通のコンストラクタを持つクラスを対応のID渡すだけで、生成してくれる
関数を作ろうと思っていますが、
↓こんな感じ

基底クラスがあり(他にも仮想関数等がある予定。改行多くなるのでpublic等省略)
class IUnko{
IFoo(void* lpParam);
};
それを継承したクラスを複数個書く
class CTestA : public IUnko{
CTestA(void* lpParam);
};
class CTestB : public IUnko{
CTestB(void* lpParam);
};

これの生成をIDで指定したいのです。
IUnko* Make(long id,void* lpParam);
id に 1を渡すとCTestAが作られ、
id に 2を渡すとCTestBが作られる。
みたいな。

現在、生成関数を、クラス別に作り
その関数ポインタをテーブルにして、生成する方法を考えていますが
↓こんな感じ。関数の型宣言こまかいこと忘れたので、てきとうに書いた。
IUnko* MakeA(void* lpParam);//CTestAを作る
IUnko* MakeB(void* lpParam);//CTestBを作る
MakeTbl[] = { MakeA,MakeB };
IUnko* Make(long id,void* lpParam){ return MakeTbl[id]; }

他にスマートなやり方(C++チックな方法)ありませんか?