首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要列表设计(面向对象)建议

需要列表设计(面向对象)建议
EN

Stack Overflow用户
提问于 2011-08-16 23:03:42
回答 3查看 150关注 0票数 0

我正在尝试使用C++为嵌入式设备实现一个用于列表的泛型类。这样的类将提供方法来更新列表,排序列表,根据一些用户指定的标准过滤列表,根据一些用户指定的标准对列表进行分组等。但是我希望这个泛型类支持相当多的列表种类,并且每个种类都可以有不同的显示方面。例如:一种列表可以在其每个元素中包含字符串和浮点数。其他类型可以在每个元素中包含位图、字符串和特殊字符。等。

我用感兴趣的方法(排序、分组等)写下了一个类。这个类有另一个类的对象(比如DisplayAspect)作为它的成员。但是DisplayAspect类的成员变量的数量和每个成员变量的类型是未知的。实现这一点的更好方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2011-08-16 23:05:37

为什么不使用,C++提供了这一点,而且它提供了您提到的所有功能(它是模板化的类,所以它支持您能想到的所有数据类型)。

而且,重新发明轮子是没有意义的,因为您编写的代码几乎永远不会像std::list那样高效。

如果你仍然想重新发明这个轮子,你应该写一个。

票数 4
EN

Stack Overflow用户

发布于 2011-08-16 23:30:01

首先,您可能应该使用std::list作为您的列表,正如其他人所说的那样。然而,在我看来,您在列表中添加哪些内容时遇到了更多问题,所以我将重点放在问题的这一部分。

由于您还希望在列表的每个元素中存储多位信息,因此需要创建多个类,每个类用于存储每个组合。您没有描述为什么要存储多位信息,但您可能希望为每个类使用一个逻辑名称。因此,例如,如果您存储了一个名称和一个价格(字符串和一个双精度型),那么您可以给这个类起一个类似Product的名称。

您提到创建一个名为DisplayAspect的类。

  • 如果这是因为您想让一段代码打印所有这些列表,那么您应该使用继承和多态性来实现此目标。要做到这一点,一种方法是使您的DisplayAspect类成为具有所需函数(例如printItem())的纯虚拟抽象类,并使您为数据组合创建的每个类都是此DisplayAspect类的子类。
  • 另一方面,如果您创建了DisplayAspect类以便可以重用列表代码,则应该查看模板类。std::list是一个模板类的示例,它将包含您想放入其中的任何类型,在这种情况下,您可以删除您的DisplayAspect类。
票数 0
EN

Stack Overflow用户

发布于 2011-08-17 00:05:50

其他人(例如,@Als)已经对你提出的问题给出了显而易见的、直接的答案。如果你真的想要一个链表,它们无疑是正确的:std::list显然是第一选择。

但是,我建议您可能根本不需要链表。链表只是一种有用的数据结构。考虑到你所说的你想要的东西(排序、分组),特别是你的目标(嵌入式系统,所以你可能没有太多的内存可以浪费),链表对于你想要做的事情来说可能不是一个很好的选择。至少在一开始,听起来更接近数组的东西可能更有意义。

如果您最终(错误地)认为链表确实是正确的选择,那么您很有可能只需要一个单链表。为此,您可能需要查看Boost Slist

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7080410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档