【发布时间】:2012-02-07 02:48:51
【问题描述】:
寻找与 C# 的 Arraylist 集合类匹配的等效容器类。是否有任何接近容器的东西,可以提供基于索引的枚举以及保存多种数据类型。
我想做的是实现一个模型-视图-控制器。我正在尝试创建一个控制器,它可以在内部管理不同类型的形状数据类型(例如: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++ 中有其他容器类可以帮助我实现此功能,或者有一种方法可以使用向量类来存储多种数据类型。
【问题讨论】:
-
¤ 这个问题听起来像一个红鲱鱼:设计错误。但是考虑到你真的想要那个,最简单的就是一个包含一个 int 和一个字符串的结构类型。也许有一个成员说哪个。类似于 Pascal 的解决方案是一个“变体记录”,这意味着一个带有一个成员的联合,表示哪个联合成员当前有效。这在 C++11 中有效,但不适用于在 C++03 中具有构造函数的类型。您可以使用 boost::variant 或其他此类 Boost 类,我忘记了名称。但是,鉴于这很可能是一个设计错误,我建议保持简单,准备好删除它。干杯&hth.,
-
@Serge:还请向 OP 解释访问这些元素的一种方法。干杯,
-
跟进 Alf 的评论。如果使用 Visual Studio,您的“变体记录”实际上就是 VARIANT :-)
-
@Alf P. Steinbach:感谢您的反馈。我也在考虑查看 Boost 库。我正在与其他几个小组合作,并试图避免使用最小化外部库的使用,然后是 STD。
标签: c++ types containers