【发布时间】:2023-03-11 14:20:01
【问题描述】:
我正在尝试创建一个可以从 2 个文件中读取一些数据的程序。 第一个文件是标题,描述数据结构(维度、数据类型、范围等),第二个是原始数据。
为了在运行时处理不同的数据类型,我创建了一个模板类,该类将用作数据的容器。根据header中读取的数据类型,我将创建一个专门的容器类来存储数据。
但是,现在我面临另一个问题。如何在运行时创建动态多维数组?
我首先想到的是用旧的方式来做,把一个指针放到存储类中,然后创建一些循环(= 到维度)来创建一个新数组(新数组[大小])。 但我不认为这是一种非常干净的方式。
我也想过堆叠std::vector,但是我不知道运行前的维度。
然后我考虑使用boost创建一个multi_array,并在运行时使用resize()来更新我的数组的范围,但是创建数组时需要知道维度(multi_array
或者还有其他方法可以做到这一点吗? 我的最终目标是在运行时创建一个多维数组,我可以在我的所有班级中访问它。
谢谢。
编辑:我读到的大多数主题都是针对固定维度数组的,具有可变大小。但就我而言,维度也有所不同。
更新:你的回答启发了我一个想法 Hugues。
我已经有一个模板类来读取数据,但现在它只将数据类型作为参数。
我正在考虑为其添加维度并创建一个这样的类:
storageClass< data_type, data_dimension > myStorage(filename, data_extent, data_endian, data_encoding);
这样,我还可以模板化数据的维度,并创建一个多维数组(例如使用 boost)。 我会让你知道它是否有效。 谢谢。
更新 2: 显然这是不可能的,因为模板需要常量表达式。我无法传递变量“维度”(即使在这种情况下它是一个固定值,但它不是在编译时定义的)。 所以我想我最好的选择是在自定义存储类中创建一个可变参数getter,并返回相应的值。问题是可变参数方法涉及解析参数,并且由于这是一个经常被调用的方法,它不是最佳的。
【问题讨论】:
标签: c++ boost multidimensional-array runtime