是否存在STL容器或其他与Java的链接列表或C#的阵列列表具有相同功能的容器?即将不同类型附加到相同的数组中,如
List.Append(1);
List.Append("I am a string");
List.Append(True);
和动态函数如
List.Resize();
List.GetSize();
等?
如果没有,你可以自己使用模板等实现吗?如果是这样,怎么样?
答案 0 :(得分:7)
使用模板很难实现这一点,因为模板为成员假设了一种类型。在C ++中,你必须使用多态与一个公共源(在Java和C#中可用作所有类的常见“对象”父级,恕我直言)。
您可以尝试使用提升库以及boost::variant
或boost::any
(choose which one fits your needs)。
答案 1 :(得分:4)
首先,C#中的ArrayList
和Java中的LinkedList
是根本不同的野兽(一个实现可调整大小的数组,而另一个实现链表)。
其次,不推荐使用C#中的ArrayList
(但不是Java中的{1}};请改用通用List<T>
(在您的情况下,使用List<object>
)。
第三,这与C ++中的std::vector
相对应。
如果您需要在其中插入不同的类型,您有三个基本选择:
答案 2 :(得分:1)
您可以使用boost::any,然后使用std :: list 请查看提升主页的examples。
答案 3 :(得分:0)
您可以将std :: list与boost.Variant组合为T类型。
答案 4 :(得分:0)
如果您的所有数据都在类层次结构中,那么您可以使用std :: list或指针向量(裸或智能)到根类。
如果没有,那么您需要使用适配器使它们看起来是同一个类,例如boost::variant然后列出这些。例如std::list<boost::variant>