name、つまり文字列を本当に渡しますか? 次に、Item* クラスに対応する関数を提供する必要があります。
class ItemOne {
static std::string name();
};
ItemGenerator *someItem = new ItemGenerator(ItemThree::name());
それともテンプレートをお探しですか?そこにはさまざまな可能性があります。おそらく ItemGenerator 基本クラスから派生したクラス テンプレートを作成します。
class AbstractItemGenerator { /* ... */ };
template <class Item>
class ItemGenerator {
ItemGenerator();
};
ItemGeneratorBase *someItem = new ItemGenerator<ItemTwo>();
または、コンストラクターのみをテンプレート化します。パラメーターを明示的に指定することはできないため、引数推定を使用します。
//take 1: use pointers
class ItemGenerator {
template <class Item>
ItemGenerator(Item* dummy);
};
ItemGenerator *someItem = new ItemGenerator((ItemFour*)NULL);
//take 2: use a tag struct
template <class I>
struct ItemTag{};
class ItemGenerator {
template <class Item>
ItemGenerator(ItemTag<Item> tag);
};
ItemGenerator *someItem = new ItemGenerator(ItemTag<ItemOne>());
これらのいずれかがお客様のニーズに合っているかどうかはわかりません。たぶん、これを何に使いたいかを詳しく説明してください。