我有一个如下设计的类:
class Meal {
public:
virtual void cook() = 0; // pure virtual
}
class Omelette : Meal {
public:
void cook() {/*do something*/}; // non-virtual
}
class Waffle : Meal {
public:
void cook() {/*do something*/}; // non-virtual
}
std::vector< std::unique_ptr<Meal> > menu;
void addMeal(const Meal& meal) {
menu.emplace_back(new Meal(meal)); // cannot allocate an object of abstract type
}
由于我无法创建抽象对象,因此我无法找到将Meal
-derived 对象添加到的方法。menu
有没有办法执行上述代码?我宁愿Meal
保持抽象。我可以传入一个指向现有的Meal
派生对象的指针,但是我的 unique_ptr 几乎不是唯一的。