说我有一个叫做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>());

08-19 09:31