你真的想通过名,即一个字符串?然后,你必须提供具有相应功能的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>();
或者只使construtor模板 - 你不能显式地指定参数,所以使用argumet扣:
//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>());
我不确定这些是否适合您的需求。也许要详细说明你想用什么。
看看“工厂”的设计模式。 – Max 2013-03-01 16:28:39
你究竟想达到什么目的?换句话说,'ItemGenerator'是用来处理类名还是'static'成员函数? – 2013-03-01 16:30:23
这真的取决于你想如何使用构造函数中的类。你会得到大量不同的答案,它们会做出不同的假设,并得到不同的结果。 – 2013-03-01 16:40:14