我正在尝试使用C++为嵌入式设备实现一个用于列表的泛型类。这样的类将提供方法来更新列表,排序列表,根据一些用户指定的标准过滤列表,根据一些用户指定的标准对列表进行分组等。但是我希望这个泛型类支持相当多的列表种类,并且每个种类都可以有不同的显示方面。例如:一种列表可以在其每个元素中包含字符串和浮点数。其他类型可以在每个元素中包含位图、字符串和特殊字符。等。
我用感兴趣的方法(排序、分组等)写下了一个类。这个类有另一个类的对象(比如DisplayAspect)作为它的成员。但是DisplayAspect类的成员变量的数量和每个成员变量的类型是未知的。实现这一点的更好方法是什么?
发布于 2011-08-16 23:05:37
为什么不使用,C++提供了这一点,而且它提供了您提到的所有功能(它是模板化的类,所以它支持您能想到的所有数据类型)。
而且,重新发明轮子是没有意义的,因为您编写的代码几乎永远不会像std::list那样高效。
如果你仍然想重新发明这个轮子,你应该写一个。
发布于 2011-08-16 23:30:01
首先,您可能应该使用std::list作为您的列表,正如其他人所说的那样。然而,在我看来,您在列表中添加哪些内容时遇到了更多问题,所以我将重点放在问题的这一部分。
由于您还希望在列表的每个元素中存储多位信息,因此需要创建多个类,每个类用于存储每个组合。您没有描述为什么要存储多位信息,但您可能希望为每个类使用一个逻辑名称。因此,例如,如果您存储了一个名称和一个价格(字符串和一个双精度型),那么您可以给这个类起一个类似Product的名称。
您提到创建一个名为DisplayAspect的类。
DisplayAspect类成为具有所需函数(例如printItem())的纯虚拟抽象类,并使您为数据组合创建的每个类都是此DisplayAspect类的子类。DisplayAspect类以便可以重用列表代码,则应该查看模板类。std::list是一个模板类的示例,它将包含您想放入其中的任何类型,在这种情况下,您可以删除您的DisplayAspect类。发布于 2011-08-17 00:05:50
其他人(例如,@Als)已经对你提出的问题给出了显而易见的、直接的答案。如果你真的想要一个链表,它们无疑是正确的:std::list显然是第一选择。
但是,我建议您可能根本不需要链表。链表只是一种有用的数据结构。考虑到你所说的你想要的东西(排序、分组),特别是你的目标(嵌入式系统,所以你可能没有太多的内存可以浪费),链表对于你想要做的事情来说可能不是一个很好的选择。至少在一开始,听起来更接近数组的东西可能更有意义。
如果您最终(错误地)认为链表确实是正确的选择,那么您很有可能只需要一个单链表。为此,您可能需要查看Boost Slist。
https://stackoverflow.com/questions/7080410
复制相似问题