如何在Ada中明确显示泛型类型的大小?

亚历克斯

我正在尝试编译此代码:https : //github.com/RanaExMachina/ada-fuse

不幸的是,在构建时出现此错误:

fuse-system.ads:147:04: size clause not allowed for variable length type

这似乎是一个问题,因为它在代码中尝试设置具有通用类型作为条目的记录的大小。这似乎是一个新的错误,因为开发人员在2.5年前写的时候就没有这个问题。不幸的是,他无法在短时间内帮助我,但我必须继续努力。但是,我在解决此问题上有点无奈。

基本上,在我看来,我必须以某种方式告诉gnat这种类型的大小,这与gnat的看法相反,是先验的:它是一种访问类型。无论是在record或泛型类型定义。

相关部分是:

fuse-main.ads:
  package Fuse.Main is
    package IO is
      new Ada.Direct_IO (Element_Type);
    type File_Access is access IO.File_Type;

fuse-system.ads:
  generic
    type File_Access is private;
  package Fuse.System is
  ...
    type File_Info_Type is record
      Flags       : Flags_Type;
      Fh_Old      : Interfaces.C.unsigned_long;
      Writepage   : Interfaces.C.int;
      Direct_IO   : Boolean := True;
      Keep_Cache  : Boolean := True;
      Flush       : Boolean := True;
      Nonseekable : Boolean := True;
      Fh          : File_Access;
      Lock_Owner  : Interfaces.Unsigned_64;
    end record;
  type File_Info_Access is access File_Info_Type;
  pragma Convention (C, File_Info_Type);
  for File_Info_Type'Size use 32*8;

我的版本是:4.9.2-1(debian jessie)

西蒙·赖特

知道这File_Access是一种访问类型,但是在Fuse.System编译器中则不是。它所知道的就是它是确定的,并且支持赋值和相等性。实际可能是数百个字节。

要告诉编译器它一种访问类型,请尝试以下操作(为方便起见,我在Mac OS X上将其压缩为一个包,因此为64位指针大小;可以编译):

with Ada.Text_IO;
package Fuse_Tests is

   generic
      type File_Type is limited private;
      type File_Access is access File_Type;
   package Fuse_System is
      type File_Info_Type is record
         Fh : File_Access;
      end record;
      for File_Info_Type'Size use 64;
   end Fuse_System;

   type File_Access is access Ada.Text_IO.File_Type;

   package My_Fuse_System is new Fuse_System
     (File_Type   => Ada.Text_IO.File_Type,
      File_Access => File_Access);

end Fuse_Tests;

或者,在注释中建议一个替代方案:

with Ada.Text_IO;
package Fuse_Tests is

   generic
      type File_Type;
   package Fuse_System is
      type File_Access is access File_Type;
      type File_Info_Type is record
         Fh : File_Access;
      end record;
      for File_Info_Type'Size use 64;
   end Fuse_System;

   package My_Fuse_System is new Fuse_System
     (File_Type => Ada.Text_IO.File_Type);

   --  if needed ...
   subtype File_Access is My_Fuse_System.File_Access;

end Fuse_Tests;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java中创建泛型的固定大小的数组?

来自分类Dev

没有明确声明的泛型类型的分配如何被滥用?

来自分类Dev

如何在TypeScript泛型中动态指定类型?

来自分类Dev

如何在TypeScript中返回泛型类型

来自分类Dev

如何在Java中推断泛型类型?

来自分类Dev

如何在泛型类中处理可为空的类型

来自分类Dev

如何在Java中实例化泛型类型?

来自分类Dev

Scala如何在foreach中还原泛型类型

来自分类Dev

如何在泛型方法中引用类型参数的值

来自分类Dev

如何在 TypeScript 中实例化泛型类型?

来自分类Dev

如何在泛型类中返回对象的泛型类型?

来自分类Dev

如何在泛型方法中获取泛型类型的类实例

来自分类Dev

如何在显示的javadoc代码块中获得泛型?

来自分类Dev

未明确传递泛型类型的值?

来自分类Dev

未明确传递泛型类型的值?

来自分类Dev

如何在Scala中为泛型类型提供默认类型类?

来自分类Dev

在Java中,如何在泛型类型的实例上调用getClass时避免原始类型?

来自分类Dev

如何在 Roslyn 中检查方法参数类型/返回类型是否为泛型?

来自分类Dev

当泛型参数具有多种数据类型时,如何在rust中实现泛型?

来自分类Dev

如何在JAVA泛型中定义使用2个泛型参数扩展Map对象的类型?

来自分类Dev

如何在ada中打印通用类型?

来自分类Dev

如何在类中使用扩展的泛型类型的类型?

来自分类Dev

TypeScript:如何将类型明确传递给此函数的泛型

来自分类Dev

如何在我子类化的类中的Swift中返回泛型类型

来自分类Dev

Ada中数组类型的大小

来自分类Dev

如何在泛型类中返回“ this”?

来自分类Dev

如何在Scala中定义泛型?

来自分类Dev

如何在Scala中定义泛型?

来自分类Dev

在Visual Studio中突出显示泛型类型的语法

Related 相关文章

  1. 1

    如何在Java中创建泛型的固定大小的数组?

  2. 2

    没有明确声明的泛型类型的分配如何被滥用?

  3. 3

    如何在TypeScript泛型中动态指定类型?

  4. 4

    如何在TypeScript中返回泛型类型

  5. 5

    如何在Java中推断泛型类型?

  6. 6

    如何在泛型类中处理可为空的类型

  7. 7

    如何在Java中实例化泛型类型?

  8. 8

    Scala如何在foreach中还原泛型类型

  9. 9

    如何在泛型方法中引用类型参数的值

  10. 10

    如何在 TypeScript 中实例化泛型类型?

  11. 11

    如何在泛型类中返回对象的泛型类型?

  12. 12

    如何在泛型方法中获取泛型类型的类实例

  13. 13

    如何在显示的javadoc代码块中获得泛型?

  14. 14

    未明确传递泛型类型的值?

  15. 15

    未明确传递泛型类型的值?

  16. 16

    如何在Scala中为泛型类型提供默认类型类?

  17. 17

    在Java中,如何在泛型类型的实例上调用getClass时避免原始类型?

  18. 18

    如何在 Roslyn 中检查方法参数类型/返回类型是否为泛型?

  19. 19

    当泛型参数具有多种数据类型时,如何在rust中实现泛型?

  20. 20

    如何在JAVA泛型中定义使用2个泛型参数扩展Map对象的类型?

  21. 21

    如何在ada中打印通用类型?

  22. 22

    如何在类中使用扩展的泛型类型的类型?

  23. 23

    TypeScript:如何将类型明确传递给此函数的泛型

  24. 24

    如何在我子类化的类中的Swift中返回泛型类型

  25. 25

    Ada中数组类型的大小

  26. 26

    如何在泛型类中返回“ this”?

  27. 27

    如何在Scala中定义泛型?

  28. 28

    如何在Scala中定义泛型?

  29. 29

    在Visual Studio中突出显示泛型类型的语法

热门标签

归档