当编译时数据格式和类型未知时,C++将数据读入内存

C++ Reading Data into Memory when Data Format and Type is Unknown at Compile Time

本文关键字:数据 内存 C++ 未知 数据格式 编译 类型      更新时间:2023-10-16

问题

如果文件流中的数据格式未知,如何将数据读取到类内的向量中?

(注意:…如注释中所述…如果文件格式类型为float,则该文件仅包含float数据。它不能是floatdouble的混合。-理解以下问题后,这将有意义…(

我正在编写一个C++类,以从指定格式的文件中读取数据。为了解决这个问题,让我们简化文件格式。如下所述。

  • 文件的前4个字节形成int,这用作指定文件数据格式的标志。

    • 如果int为0,则文件数据的类型为float
    • 如果int为1,则文件数据的类型为double
  • 文件中接下来的4个字节形成一个int。这指定了要读取到数组或std::vector中的元素数。

然而,我们不知道std::vector<float>还是std::vector<double>是预先需要的。

我曾尝试过为自己解决这个问题,但我取消了尝试,因为这个问题吸引了大量的反对票,正如元中所讨论的,造成这种情况的一个可能原因是解决问题的尝试没有完成。(然而,你可以在下面的答案中看到我完成的尝试-正如评论中所讨论的,它有一些问题尚未解决。(

这可能不是解决这个问题的最简单方法,但我认为它会起作用。我有点觉得我需要更多的信息和代码才能真正解决这个问题,所以这就是我所能做的所有信息:

我会将整数(表示文件中的数据类型(读取到bool中。然后我会把它作为一个参数传递给vectorDataType之类的函数。在该函数中,使用if-else语句和typedefif-else语句:

if (dataType == 0) {
    typedef float fileData;
}
else {
    typedef double fileData;
}

现在,您不需要使用类型名称,只需要将名称定义为floatdouble即可。

std::vector<fileData>;

不知道数据类型可能会在程序中产生更多问题。但是,假设您不需要知道矢量之外的数据类型,这应该是解决当前问题的好方法。