说我有一个叫做ItemOne,ItemTwo,ItemThree和ItemFour的类的列表,它们都是ItemBase的子类。
我想在另一个名为ItemGenerator的类中有一个构造函数,该构造函数可以接受任何这些类的名称。我该怎么做?
ItemGenerator *someItem = new ItemGenerator(ItemThree);
另一种选择是在这些类之一上传递静态函数,但是同样,我也不知道如何执行该操作。
ItemGenerator *someItem = new ItemGenerator(ItemOne::start());
谢谢。
最佳答案
您可以使用模板:
struct ItemBase {virtual ~ItemBase();};
struct ItemOne : ItemBase {};
struct ItemTwo : ItemBase {};
struct ItemThree : ItemBase {};
struct ItemFour : ItemBase {};
struct ItemGeneratorBase {
virtual unique_ptr<ItemBase> generate() {}
virtual ~ItemGeneratorBase() {}
};
template<typename Item>
struct ItemGenerator : ItemGeneratorBase {
virtual unique_ptr<ItemBase> generate() {
return unique_ptr<ItemBase>(new Item());
}
};
std::unique_ptr<ItemGeneratorBase> someItem(new ItemGenerator<ItemThree>());