问题
如果文件流中的数据格式未知,如何将数据读取到类内的向量中?
(注意:…如注释中所述…如果文件格式类型为float
,则该文件仅包含float
数据。它不能是float
和double
的混合。-理解以下问题后,这将有意义…(
我正在编写一个C++类,以从指定格式的文件中读取数据。为了解决这个问题,让我们简化文件格式。如下所述。
-
文件的前4个字节形成
int
,这用作指定文件数据格式的标志。- 如果
int
为0,则文件数据的类型为float
- 如果
int
为1,则文件数据的类型为double
- 如果
-
文件中接下来的4个字节形成一个
int
。这指定了要读取到数组或std::vector
中的元素数。
然而,我们不知道std::vector<float>
还是std::vector<double>
是预先需要的。
我曾尝试过为自己解决这个问题,但我取消了尝试,因为这个问题吸引了大量的反对票,正如元中所讨论的,造成这种情况的一个可能原因是解决问题的尝试没有完成。(然而,你可以在下面的答案中看到我完成的尝试-正如评论中所讨论的,它有一些问题尚未解决。(
这可能不是解决这个问题的最简单方法,但我认为它会起作用。我有点觉得我需要更多的信息和代码才能真正解决这个问题,所以这就是我所能做的所有信息:
我会将整数(表示文件中的数据类型(读取到bool
中。然后我会把它作为一个参数传递给vectorDataType
之类的函数。在该函数中,使用if-else
语句和typedef
。if-else
语句:
if (dataType == 0) {
typedef float fileData;
}
else {
typedef double fileData;
}
现在,您不需要使用类型名称,只需要将名称定义为float
或double
即可。
std::vector<fileData>;
不知道数据类型可能会在程序中产生更多问题。但是,假设您不需要知道矢量之外的数据类型,这应该是解决当前问题的好方法。