将德尔福记录与"polymorphic"转换为C / C ++

convert delphi record with "polymorphic" to c/c++

本文关键字:转换 polymorphic 德尔福 记录      更新时间:2023-10-16

据我所知,我有一些较旧的Delphi代码习惯于将单个精度数字"看起来"为长整数写入二进制文件:(下面显示的部分代码)

type
  GridFileType = file of longint;
  TTrick = Record
      case Boolean of
      False: (MyLongInt: LongInt);
      True: (MySingle: Single);
      end;
implementation
VAR
  li: longint;
  sp: single;
  Trick: TTrick;

PROCEDURE WriteSingle(VAR GridFile: GridFileType; sp: single);
BEGIN
  Trick.MySingle:=sp;
  write(GridFile,Trick.MyLongInt);
END;

我在德尔福(Turbo Pascal)方面的经验非常有限,而且我已经很久没有在这方面做任何事情了 - 也许我弄错了。但是 - 如何在 C/C++ 中编写等效的东西?

我试过只将浮点数写入二进制文件,但结果并不相同......

这个德尔菲变体记录从字面上翻译为 C 并集。在德尔菲变体记录中,MyLongintMySingle在结构中占据相同的位置。等效的 C 联合如下所示:

union myunion
{
    int myint;
    float myfloat;
};

在呈现的德尔菲代码中,实际上并不需要任何变体记录。代码可以完美地写成这样:

PROCEDURE WriteSingle(VAR GridFile: GridFileType; sp: single);
BEGIN
  write(GridFile,sp);
END;

在这一点上,该过程似乎有些多余。

在 C 代码中,您可以执行相同的操作,并将浮点值直接写入文件。实际上没有必要将其别名为整数并写入整数。完全相同的字节将落在文件中。