我正在尝试使用C ++为嵌入式设备实现列表的泛型类。这样的类将提供更新列表,对列表进行排序,根据一些用户指定的标准过滤列表,根据一些用户指定的标准对列表进行分组等方法。但是我希望这个泛型类有很多种类的列表。支持和这些品种中的每一个可以具有不同的显示方面。示例:一种列表可以在其每个元素中包含字符串和浮点数。其他变种可能在每个元素中都有位图,字符串和特殊字符。等
我用感兴趣的方法(排序,组等)写下了一个类。该类具有另一个类的对象(比如DisplayAspect)作为其成员。但是成员变量的数量和类DisplayAspect的每个成员变量的类型是未知的。实现这个更好的方法是什么?
答案 0 :(得分:4)
为什么不使用 std::list ,C ++提供了它,它提供了你提到的所有功能(它是模板化的类,所以它支持你能想到的所有数据类型)。 / p>
此外,重新发明轮子没有意义,因为您编写的代码几乎不会像 std :: list 那样高效。
如果你仍想重新发明这个轮子,你应该写一个 template list class 。
答案 1 :(得分:0)
首先,您应该使用std::list
作为您的列表,正如其他人所说的那样。在我看来,你对列表中的内容有更多的疑问,但是,我正专注于这部分问题。
由于您还希望在列表的每个元素中存储多个信息位,因此您需要创建多个类,一个用于存储每个组合。您没有描述存储多个信息的原因,但是您希望为每个类使用逻辑名称。因此,例如,如果您存储的是名称和价格(字符串和双精度),则可以为该类命名为Product
。
您提到创建一个名为DisplayAspect
的课程。
DisplayAspect
类成为一个抽象类,其中包含所需的函数(例如printItem()
)纯虚拟,并为数据组合创建的每个类都是此类的子类。 DisplayAspect
上课。DisplayAspect
类以便可以重用列表代码,则应该查看模板类。 std::list
是模板类的示例,它将包含您要添加到其中的任何类型,在这种情况下,您可以删除DisplayAspect
类。答案 2 :(得分:0)
其他人(例如@Als)已经明确,直接地回答了你提出的问题。如果你真的想要一个链表,那么它们无疑是正确的:std::list
是明显的首选。
如果你最终(错误地)决定链接列表确实是正确的选择,那么你很可能只需要一个单链表。为此,您可能需要查看Boost Slist。虽然它是一个小额外的工作(它是侵入性的),但这通常会有较低的开销,因此它至少不会像许多通用链接列表那样糟糕。