gpt4 book ai didi

c++ - 数组的命名子数组

转载 作者:行者123 更新时间:2023-11-28 01:04:57 28 4
gpt4 key购买 nike

我想设计一个具有以下属性的数据结构:

  1. 可作为某种类型的单个数组访问,比如 T。例如 s[i]
  2. 能够访问其中的命名范围。例如 s.GoodObjects[i]s.BadObjects[j]
  3. 将其作为一个整体进行迭代(STL 算法等)。
  4. 将名称索引转换为整个数组中的索引。这里的界面也是一个很好的问题。

此外,所需的行为是能够

  1. 我真的希望在编译时检查范围名称,而不是一些字符串命名的范围,而是 C++ 标识符命名的范围。
  2. 向子数组添加或删除元素。 s.BadObjects.push_back(你的妈妈)
  3. 在不使用宏的情况下实现它,只需良好的 C++ 和模板,但用法的可读性当然是第一要务。
  4. 范围数组可能具有指向派生类的指针的元素类型,其中 T 是指向基类的指针。

那么,您将如何设计这样的结构?

编辑

貌似我没有说的太明确,但是第四个要求(第一个列表)其实很重要。也许更普遍的问题如下:如何正确设计不同类型(具有公共(public)父类(super class))对象的索引集合,以便轻松索引访问特定子类型的对象?因此,拥有一个直通索引是必要的。

可以假设所有类型在编译时都是已知的,并且整个数组中每个特定对象的数量是常量(来自配置文件)。

最佳答案

如果您真的想要这样做,您可以让一个类存储多个 std::vectors,然后为该类本身提供一个 operator[],它重定向到这些 vector ,可能取决于它们各自的大小。

同时,外部类还可以提供 begin()end() 以允许对整个数据集进行迭代。

我怀疑 good-design 标签在这里是否适用。 :-)

关于c++ - 数组的命名子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6773880/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com