C ++等效的C#Arraylist来保存多种数据类型

时间:2012-02-06 18:04:29

标签: c++ types containers

寻找与C#的Arraylist集合类匹配的等效容器类。是否有任何接近容器的东西可以提供基于索引的枚举以及保存多种数据类型。

我要做的是实现模型 - 视图 - 控制器。我正在尝试创建一个可以在内部管理不同类型的形状数据类型的Controller(例如:Box2D,Circle2D,Circle3D等)

//Controller code
class Controller
{
    //internally track all shapes...

    void CreateShape(const Box2d &box); 
    void CreateShape(const Box3d &box);
    void CreateShape(const Circle2d &circle);

    //More Add/Edit/Remove Shape methods...

    void Reset(); //clear the container of shapes...
};

我正在尝试创建一个可以容纳多种数据类型的向量或不同类型的容器。例如:

//Is this line of code possible??
vector <int, string> vec;    

int i=0;
string str = "test";

//add different data-type objs into my vector mutable array
vec.push_back(i);
vec.push_back(str);

请告知,如果C ++中有其他容器类可以帮助我实现此功能,或者有一种方法可以使用vector类来存储多种数据类型。

2 个答案:

答案 0 :(得分:3)

你可能想要这样的东西:

class Shape {
public:
    virtual void rotate(double degrees) = 0;
    virtual void scale(double newScale) = 0;
    virtual ~Shape(){}
    //etc, etc, etc...
};

class Box2d : public Shape {
public:
    virtual void rotate(double degrees) {
        //Code for rotating...
    }

    //Implement other virtual methods...
};
class Circle2d : public Shape {}; //Implement virtual methods
class Box3d : public Shape {}; //Implement virtual methods


int main() {
    vector<Shape*> items;
    items.push_back(new Box2d());
    items.push_back(new Circle2d());

    //Now doing this:
    items[i]->rotate(180.0);
    //Will call Box2d's rotate function
}

答案 1 :(得分:0)

将多个数据类型放入向量中的唯一方法是封装它。