我有这些课程:
class Element{
};
class Button : public Element{
};
class Label : public Element{
};
class Input : public Element{
};
我希望能够创建一个void add(const Element & e)
函数,将派生类对象插入到shared_ptrs的向量中。
我发现的答案提示如下:
vector<shared_ptr<CElement>>> vec;
vec.push_back(make_shared<DerivedClass>());
如果我为每个派生类创建了一个重载的add函数,那么这可能会有效,但这似乎是一个悲惨的解决方案。
所以我的问题是:如何在不知道我试图插入的派生类的情况下将派生类对象插入vector<shared_ptr<CElement>>>
?
答案 0 :(得分:2)
这就是铸造之美。您的派生类可以下载到基类。
void add(std::shared_ptr<Element> ptr) {
vec.push_back(ptr);
}
add(std::make_shared<Button>()); // std::shared_ptr<Button> casted to std::shared_ptr<Element>
不要忘记在基类中使用虚拟析构函数以避免资源泄漏!