C ++ std容器-没有指针的多态性。是否有可能?

弗朗西斯·培根

是否可以在不使用指针的情况下任何std c ++容器中维护派生类的知识,从而动态地从容器中转换返回值?我知道我可以创建向量或某些基类类型的指针,并保留它们的子类。但是问题是我必须使用指针吗?

例子:

struct A {
  int x = 0, y = 0, z = 0;
  virtual void foo() { cout << "A" << endl; };
};

struct B : public A {
  int a = 1, b = 1, c = 1;
  virtual void foo() { cout << "B" << endl; };
};

int main() {  
  <SOMECONTAINER><A> a(2);
  a[0] = A();
  a[1] = B();
  B * p;
  B& n = dynamic_cast<B&>(a[1]); // Always throws?
  p = dynamic_cast<B*>(&a[1]); // Always zero?
  cout << p << endl;
}
乔恩

是的,您必须使用指针。否则,尝试将aB放入切片A结果的容器中:将gets切成一个(这不限于容器,如果您这样做或将a传递给期望a的函数,则会发生完全相同的事情)。BAA a = B()BA

当您稍后将其取出时,它A绝对是一个完全不知道的东西,它的血统包括一个杰出的类型的祖先B-并且无论您以何种方式看待它A,您都无法将其设为a B

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有多态性的C ++复制指针的向量

来自分类Dev

C ++多态性错误:没有匹配的函数来调用

来自分类Dev

使多态性在C ++映射中起作用而没有内存泄漏?

来自分类Dev

带有 STL 容器的 C++ std::unique_ptr

来自分类Dev

C ++:运算符=具有多态性的重载

来自分类Dev

具有多态性的C#泛型

来自分类Dev

条件对C ++中的多态对象有什么作用?(包含多态性)

来自分类Dev

C ++的多态性

来自分类Dev

临时多态性和具有值语义的异构容器

来自分类Dev

具有多态性的std :: bind和std :: function,基类

来自分类Dev

出于多态性而指向向量的指针-C ++

来自分类Dev

C ++中的多态性-指针访问函数

来自分类Dev

std :: inplace多态容器清洗

来自分类Dev

std容器是否具有插入任何容器的通用方法?

来自分类Dev

C ++中“低级”容器数据的原始指针,智能指针或std :: vector

来自分类Dev

生命游戏,C ++-多态数组(可能还有指针)

来自分类Dev

C ++中的模板:(F-)有界多态性

来自分类Dev

在C ++中,基本上不是只有一种“多态性”吗?

来自分类Dev

嵌套类与不具有多态性的子类之间的C#差异

来自分类Dev

C ++多态性-调用具有不同签名的派生类方法

来自分类Dev

具有基于概念的多态性的多重继承 C++

来自分类Dev

C ++中是否存在真正的静态多态性?

来自分类Dev

C ++中是否存在真正的静态多态性?

来自分类Dev

具有对象或对象指针的C ++容器

来自分类Dev

C ++多态性错误

来自分类Dev

C ++中的多态性

来自分类Dev

C ++多态性。方法

来自分类Dev

误解的多态性C ++

来自分类Dev

C ++中的多态性