c++ - 从 baseclassptrVec 类型转换派生类 ptr_Vector,最好的方法是什么?

标签 c++ polymorphism casting stl

我正在获取需要传递给派生类指针 vector 的基类指针 vector ,请建议执行相同操作的最佳方法。

一种方式是

用基类ptr vector 大小创建一个新的派生类 vector

循环传入 vector

动态转换基指针并填充派生 vector 。

请建议是否有更好的方法让编译器相信 vector 是针对多态类型的。

最佳答案

如果我没看错,你有以下情况

class Base {};
class Derived: public Base {};
class Derived2: public Base {};

void foo(const vector<Derived*>&);

void bar()
{
  vector<Base*> baseVec;

  // Fill baseVec with pointers to Derived objects

  foo(baseVec); // Does not work
}

问题是,虽然BaseDerived通过继承相关,类型 vector<Base*>vector<Derived*>完全无关。两者之间没有转换。
此外,还有一个额外的问题 baseVec还可以包含指向其他 派生类的指针,例如 Derived2 , 和 foo无法处理这些。

唯一真正的解决方案是

  • 问题中概述的那个:创建一个新的 vector<Derived*>并用 dynamic_cast 填充它编辑源 vector 的内容
  • 避免在程序中出现此类类型不匹配。

关于c++ - 从 baseclassptrVec 类型转换派生类 ptr_Vector,最好的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4552582/

相关文章:

c++ - 实现 '<' 运算符

c++ - 重载一个函数,使其可以将基类转换为派生类作为参数

c++ - 为什么 "virtuality"方法在 C++ 中隐式传播?

ruby-on-rails - Rails 迁移 : tried to change the type of column from string to integer

casting - 类型断言和 TypeScript 中较新的 `as` 运算符之间有什么区别?

c# - 将 Task<T> 转换为 T

c++ - std is_member_function_pointer 中的模板类型

c++ - 在 NetBeans 中集成 Clang?

C++ 宏参数

haskell - GHC 是否会尽可能删除多态间接?