在ada语言中扩展标记的私有类型

在ada语言中扩展标记的私有类型,ada,Ada,我想在Ada.Containers.Doubly_Linked_列表的实例化中添加一个过程,该列表将打印出来。我还想隐藏一些函数和程序。如果有更好的方法,我很乐意阅读它,但是现在,我正在尝试将实例化包装到另一个包中,这意味着创建一个新的列表和游标。泛型定义如下: type List is tagged private; pragma Preelaborable_Initialization(List); type Cursor is private; pragma Pre

我想在Ada.Containers.Doubly_Linked_列表的实例化中添加一个过程,该列表将打印出来。我还想隐藏一些函数和程序。如果有更好的方法,我很乐意阅读它,但是现在,我正在尝试将实例化包装到另一个包中,这意味着创建一个新的列表和游标。泛型定义如下:

   type List is tagged private;
   pragma Preelaborable_Initialization(List);
   type Cursor is private;
   pragma Preelaborable_Initialization(Cursor);
我试过了

  package Collection is new Ada.Containers.Doubly_Linked_Lists (New_Type);
   type Cursor is new Collection.Cursor;
   type List is new tagged Collection.List with private;
这似乎对游标有效,但列表导致了预期的子类型指示错误


如何为已标记的私有类列表创建子类型?

问题在于,您都使用了
new
taged

带有Ada.Containers.Doubly_Linked_列表;
包示例是
type New_type为新整数;
包装集合为新Ada.Containers.Doubly_Linked_List(新_类型);
类型游标是新集合。游标;
类型列表是新集合。列表具有私有属性;
私有的
类型列表为新集合。记录为空的列表;
结束示例;

问题在于,您都使用了
新的
标记的

带有Ada.Containers.Doubly_Linked_列表;
包示例是
type New_type为新整数;
包装集合为新Ada.Containers.Doubly_Linked_List(新_类型);
类型游标是新集合。游标;
类型列表是新集合。列表具有私有属性;
私有的
类型列表为新集合。记录为空的列表;
结束示例;

请注意,如果您使用非
空记录
扩展
集合.List
,则必须声明对
集合中所有函数的重写。List
返回一个
列表
。这就解决了问题,谢谢。我记住了这个警告。请注意,如果您使用
null record
以外的任何内容扩展
Collection.List
,您将必须声明
集合中所有函数的重写。List
返回
List
。这就解决了问题,谢谢。我牢记这一警告。