单个c ++向量中的多个类型

时间:2015-05-18 03:39:45

标签: c++ vector mix

我想知道我是否可以将不同类型的非原生数据存储到单个载体中? 它是这样的:

$(".modal-body").modal('show');

如何声明一个向量来保存class foo { private: int x; public: foo(int a=0):x(a){} int getx() { return x; } void setx(int a=0) { x=a; } }; class var:public foo { private: int y; public: var(int a=0, int b=0):foo(a), y(b){} int gety() { return y; } void sety(int a=0) { y=a; } }; class var1:public foo { private: int z; public: var(int a=0, int b=0):foo(a), z(b){} int getz() { return z; } void setz(int a=0) { z=a; } }; var类型的数据? 我可以将它们存储在var1中,然后将它们视为std::vector<foo>类型

2 个答案:

答案 0 :(得分:3)

如果您将foo的子类型添加到std::vector<foo>,您将丢失子类型信息。有关详细信息,请参阅What is object slicing?

std::vector<foo>容器只能容纳foo类型的对象。为了能够存储从foo派生的对象,您必须在堆上分配对象并将指针存储在vector指针中,最好是智能vector指针 - std::vector<std::shared_ptr<foo>>std::vector<std::unique_ptr<foo>>

答案 1 :(得分:1)

您可以使用多态性。因此,不要声明为std::vector<foo>,而是声明为基类的指针:std::vector<foo*>

然后在你的函数中你可以声明为

vector<foo*> bar;

bar.push_back( new var1() );