在单个列表中存储多个派生类类型
Storing multiple derived class types in a single list
我想在一个stl列表中存储从同一基类派生的多个类类型。
如果我使用
list<BaseClass> L;
那么当我添加任何派生类时,我的代码编译得很好。然而,看起来我的派生类在被存储之前被自动转换为基类型。显然,我也想存储派生类型的唯一成员。我该怎么做呢?
你必须使用
list<BaseClass *> L;
但是这样的话,你就会遇到异常安全的问题(当列表超出作用域时,你在哪里销毁对象?如果之前抛出了异常怎么办?)。也许是这样:
#include <list>
#include <tr1/memory>
std::list<std::tr1::shared_ptr<BaseClass> > L;
更好。TR1的基本信息可以在维基百科上找到,比如它的文档
您需要创建的容器名称为list< Baseclass* >
或("删除"感谢@Cat Plus Plus的评论)list< Baseclass& >
(第二个有点危险)。
通过使用list< Baseclass >
,您可以满足切片问题
为了做你想做的事,你必须使用指针。一个可能的解决方案是std::list<BaseClass*>
,但是现在您必须处理复制、克隆和删除。更好的选择是使用Boost。指针容器,它会自动为你做这些
相关文章:
- 在 C++ 中用派生类型重写成员函数
- 在 C++ 中将对象转换为派生类型
- C++如果采用类类型的函数被传递派生类型,有没有办法给出错误?
- 返回派生类型时出现协变类型错误
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- 基于派生类型的编译时行为分支
- 按类型排序向量并按类型或派生类型搜索
- 为什么"运算符<<"不适用于指向派生类型的成员?
- 无法返回派生类型的标准::unique_ptr<>
- 无法从派生类型的作用域访问另一个实例的受保护成员
- dynamic_cast到具有未知模板参数的派生类型
- 派生类型的成员
- 视觉C++ dynamic_cast返回 NULL,尽管对象是派生类型
- 在运算符中动态强制转换为派生类型<<
- 如何在不转换回基类类型的情况下返回派生类型的对象?
- 将派生指针分配给C 中的其他派生类型
- 如何将派生类型的对象放在用于基本类型的向量中
- C++ - 无法将派生类型作为基类型列表传递给构造函数
- 如何在基本类型参考中存储对派生类型的参考
- 统一处理具有协变类型的函数指针(如何使用派生类型调用回调?