需要列表设计(面向对象)建议
List design (Object oriented) suggestion needed
我正在尝试使用c++实现一个嵌入式设备列表的通用类。这样的类将提供更新列表、排序列表、基于某些用户指定的标准过滤列表、基于某些用户指定的标准对列表进行分组等方法。但是我希望这个泛型类支持的列表有相当多的种类,这些种类中的每一个都可以有不同的显示方面。示例:一种列表的每个元素中都可以有字符串和浮点数。其他种类可以在每个元素中包含位图、字符串和特殊字符。等。
我用感兴趣的方法(sort, group等)写了一个类。这个类有另一个类的对象(比如DisplayAspect)作为它的成员。但是DisplayAspect类的成员变量的数量和每个成员变量的类型是未知的。实现这一点的更好方法是什么?
为什么不使用std::list, c++提供了这个,并且它提供了你提到的所有功能(它是模板化的类,所以它支持你能想到的所有数据类型)。
同样,没有必要重新发明轮子,因为您编写的代码几乎永远不会像std::list那样高效。
如果你还想重新发明这个轮子,你应该写一个模板列表类。
首先,您可能应该使用std::list
作为您的列表,正如其他人所述。然而,在我看来,你的问题更多的是在列表中写什么,所以我把重点放在问题的那一部分上。
由于您还希望在列表的每个元素中存储多个信息位,因此您将需要创建多个类,一个用于存储每个组合。您没有描述为什么要存储多比特信息,但是您希望为每个类使用一个逻辑名称。因此,例如,如果您要存储一个名称和一个价格(字符串和双精度类型),您可以给类命名为Product
。
你提到创建一个名为DisplayAspect
的类。
- 如果这是因为您希望用一段代码打印所有这些列表,那么您应该使用继承和多态性来实现这一目标。实现这一目标的一种方法是使您的
DisplayAspect
类成为具有所需功能(例如printItem()
)的纯虚拟抽象类,并使您为数据组合创建的每个类都成为此DisplayAspect
类的子类。 - 另一方面,如果您创建了
DisplayAspect
类,以便可以重用列表代码,则应该查看模板类。std::list
是一个模板类的例子,它可以保存任何你想放入的类型,在这种情况下,你可以删除你的DisplayAspect
类。
其他人(例如@Als)已经对你的问题给出了明显、直接的答案。如果你真的想要一个链表,他们无疑是正确的:std::list
显然是首选。
如果你最终(错误地)决定链表确实是正确的选择,那么你很有可能只需要一个单链表。为此,您可能需要查看Boost Slist。虽然这是一个小的额外的工作使用(它是侵入性的),这通常会有较低的开销,所以它至少不是一个很差的选择,因为许多通用的链表。
- 分段错误(内核转储) C++面向对象编程
- 由于缺少类模板,NVCC 编译面向对象代码时出现问题
- 在C++面向对象程序中,谁负责删除传递给构造函数的对象
- 是否有一种设计模式或面向对象的基本原则来处理这种共享资源的情况?
- 对"车辆的 vtable"的未定义引用 - 面向对象的编程练习
- 关于 C++ 中面向对象中的 decltype 类型
- 多态性的面向对象方法
- 成员功能在面向对象的框架中返回std :: vector.size()的效率
- 以面向对象的方式解析自定义数据包
- 面向对象编程 - 位域私有结构的公共参考
- 面向对象的编程-C 练习
- 如何使用面向对象的技术在 win32 和 c++ 中创建编辑控件
- C++面向对象的字典程序
- 面向对象架构,用于简单的基于着色器的GL程序
- 面向对象 成本计算C++不起作用
- 面向对象编程和对象组合,如何放置组合属性?
- 我在哪里可以找到一些 c++ 中的好例子来研究面向对象的概念
- 面向对象的设计选择
- 面向对象编程错误
- 需要列表设计(面向对象)建议