您真的要传递名称,即字符串吗?然后您必须为 Item*-classes 提供相应的功能,例如
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>());
我不确定其中之一是否适合您的需求。也许详细说明你想用它做什么。