从基类对象的向量中获取特定派生类的对象
Getting an object of a specific derived class, from a vector of base class objects
目前我有类A
,派生类型,B
和C
。
class A {};
class B : public A {};
class C : public A {};
然后我有一个 A
类型的向量,我附加了一个 B
和 C
类型的对象。这样:
std::vector<A*> list = new std::vector<A*>;
list->push_back(new B);
list->push_back(new C);
我的主要问题是:我将如何从这个向量中获取特定类型的对象(从 A 继承?
我尝试使用模板,尽管这给出了未解决的外部符号错误
template <class T>
T* GetObject()
{
for (A* object : list)
{
if (typeid(*object) == typeid(T)) return object;
}
throw std::exception("vector does not have object of that type");
}
给A
一个虚拟方法,比如析构函数(在编写多态类型时无论如何都应该这样做(,然后你可以使用 dynamic_cast
:
class A {
public:
virtual ~A() {}
};
class B : public A {};
class C : public A {};
...
std::vector<std::unique_ptr<A>> list;
list.push_back(std::unique_ptr<A>(new B));
list.push_back(std::unique_ptr<A>(new C));
...
template <class T>
T& GetObject()
{
for (auto &object : list)
{
T *p = dynamic_cast<T*>(object.get());
if (p)
return *p;
}
throw std::exception("vector does not have object of that type");
}
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 使用基类指针创建对象时,缺少派生类析构函数
- 为什么此派生对象无法访问基类的后递减方法?
- 将带有派生模板的对象传递给接受具有基本模板的对象的功能
- 放置派生C++的新基子对象
- 在 C++ 中将对象转换为派生类型
- 链表包含 c++ 中不同的派生类对象
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 如何在新的派生对象中获取基本对象的数据?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 获取我的基类以递增派生类对象整数
- 派生类中的对象
- 在没有默认构造函数的情况下创建的派生对象
- OOP 标识派生对象
- 如何创建派生对象的向量?
- 按基类对象访问派生类资源时出错
- 将基类分配给派生对象,反之亦然,以C++以及静态和动态对象之间的差异
- static_cast将此对象派生到C++中的基类
- 如何在构造函数完成后立即销毁从 QWindow 对象派生的内容
- 我可以判断std::type_info对象是否等于另一个对象或从另一个对象派生的类吗?