作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有名为 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>());
关于C++ - 使用类名作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15162256/
我是一名优秀的程序员,十分优秀!