如果来自文件流的数据格式未知,如何将数据读入类中的向量?
(注意:......如评论中所述......如果文件格式类型为float
,则该文件仅包含float
数据。它不能混合使用float
和double
。 - 在理解了以下问题后,这将有意义...)
我正在编写一个C ++类来从指定格式的文件中读取数据。出于这个问题的目的,让我们简化文件格式。它描述如下。
文件的前4个字节组成int
,用作指定文件数据格式的标志。
int
为0,则文件数据的类型为float
。int
为1,则文件数据的类型为double
。文件的后4个字节构成int
。这指定了要读入数组的元素数量或std::vector
。
但我们不知道是否需要提前std::vector<float>
或std::vector<double>
。
我试图为自己解决这个问题,但是我删除了这个尝试,因为这个问题吸引了大量的downvotes,并且正如在meta中所讨论的那样,可能的原因是尝试解决问题不完整。 (但是你可以在下面的答案中看到我完成的尝试 - 它有一些问题,如评论中讨论的尚未修复。)
答案 0 :(得分:0)
这可能不是解决此问题的最简单方法,但我认为它会起作用。我觉得我需要有更多的信息和代码才能真正解决这个问题,所以这就是我能用所提供的信息做的全部:
我会将整数(表示文件中的数据类型)读入bool
。然后我会将它作为参数传递给某些函数,如vectorDataType
或其他东西。在该函数中,使用if-else
语句和typedef
。 if-else
语句:
if (dataType == 0) {
typedef float fileData;
}
else {
typedef double fileData;
}
现在,您不需要使用类型名称,只需使用您定义为float
或double
的名称。
std::vector<fileData>;
不知道数据类型可能会在程序中产生更多问题。但是,假设您不需要知道制作向量之外的数据类型,这应该是解决当前问题的好方法。