小编OCD*_*rby的帖子

Ada 通用链表和通用包访问

我试图在 Ada 中从通用 Node 类中构建通用链表。但是,尽管使用了with子句和相应的前缀,但我无法访问链接列表中节点的类型和形式参数。

genericnode.ads:

generic
   type item_type is private;

package GenericNode is
   type Node is limited private;
   type NodePtr is access Node;
   
   procedure GetData(n : in Node; e : out item_type);
   procedure GetNext(n : in Node; x : out NodePtr);
   
   procedure SetData(n : in out Node; e : in item_type);
   procedure SetNext(n : in out Node; x : in NodePtr);
   
private
   type Node is
      record
         data : item_type;
         next : NodePtr;
      end record;

end GenericNode;
Run Code Online (Sandbox Code Playgroud)

genericsll.ads: …

ada nodes singly-linked-list

3
推荐指数
1
解决办法
118
查看次数

Ada - 如何获取二维数组的“第一个”和“最后一个”属性?

假设我已经为二维数组和该类型的变量声明了一个类型:

type Array2D is array(Positive range <>, Positive range <>) of Integer;
array : Array2D(1 .. 7, 1 .. 8);
Run Code Online (Sandbox Code Playgroud)

的值array'First现在是 1,现在的值array'Last是 7。我将如何访问数组第二维的“第一”和“最后”属性?

ada multidimensional-array

3
推荐指数
1
解决办法
70
查看次数

Ada - 从异构列表中释放

我正在通过继承创建一个异构的循环链表。作为动态分配的数据类型,我需要某种形式的解除分配,所以我最初想到了Ada.Unchecked_Deallocation. 不幸的是,我的访问类型的工作方式是因为根元素被标记,并且因为我希望能够使用相同的指针类型来访问层次结构的任何对象,以下代码片段将无法编译。

type Element is tagged private;
type ElementPtr is access all Element'Class;

-- fully define Element

procedure Free is new Ada.Unchecked_Deallocation(Element, ElementPtr);
Run Code Online (Sandbox Code Playgroud)

有没有人对我可以用来释放 ElementPtr 指向的任何继承 Element 类型的对象使用的内存的替代释放形式有任何建议?谢谢!

memory-management ada circular-list

1
推荐指数
1
解决办法
61
查看次数