<分区>
例如,我有继承自 CParentis
的类 CPrimus
、CSecundus
和 CTertius
,我想实现一个对象树,其中的叶子(节点?)可以是任何一个派生类的实例,例如:
- CPrimus
- CTertius
- CPrimus
- CSecundus
- CTertius
- CTertius
- CSecundus
- CSecundus
- CTertius
- CPrimus
- CTertius
- CSecundus
- CPrimus
- CTertius
在 C++ 中实现此树的最佳*方法是什么?可能需要对类进行哪些修改才能支持它?
(*) 我会将“最佳”的定义留给社区,无论是“最快”、“最有效”、“最漂亮”还是您喜欢的任何东西。我个人偏爱简单和高效,但如果 yield 值得的话,我愿意为性能牺牲简单性。此外,如果您要建议 BGL,请尝试给出示例,或者至少链接到解释如何实现树的文章或文档的特定部分。
编辑:
由于这个问题有点过于笼统,我将给出一个潜在的用例。在 Linux 中,文件系统(通常)位于裸分区、MD 阵列或 LVM 逻辑卷之上。假设我希望我的类表示这些结构并存储有关它们的元数据(设备名称、大小、uuid 等)以供以后检索,并且基类具有一组用于刷新和检索元数据的虚函数。
现在,假设我的系统有这样的磁盘布局:
- [FS-/引导]
- [ARR-md0]
- [部分sda1]
- [部分-sdb1]
- [ARR-md0]
- [FS-/]
- [LV-根]
- [VG-系统]
- [ARR-md1]
- [部分sda2]
- [部分sdb2]
- [ARR-md1]
- [VG-系统]
- [LV-根]
我如何将其表示为 C++ 数据结构?