Я хочу добавить процедуру к моему экземпляру Ada.Containers.Doubly_Linked_Lists, которая распечатает список. Я также хотел бы скрыть некоторые функции и процедуры. Если есть лучший способ, я был бы счастлив прочитать его, но пока я пытаюсь обернуть экземпляр в другой пакет, а это означает создание нового списка и курсора. Общие определяют их так:
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;
Кажется, это работает для Cursor, но List вызывает ошибку subtype indication expected
.
Как я могу подтипировать закрытый список вроде "помеченный"?
Проблема в том, что вы оба используете new
и tagged
:
with Ada.Containers.Doubly_Linked_Lists;
package Example is
type New_Type is new Integer;
package Collection is new Ada.Containers.Doubly_Linked_Lists (New_Type);
type Cursor is new Collection.Cursor;
type List is new Collection.List with private;
private
type List is new Collection.List with null record;
end Example;
Это решило проблему, спасибо. И я помню об этом предупреждении.
Имейте в виду, что если вы расширяете
Collection.List
чем-либо, кромеnull record
, вам придется объявить переопределение всех функций вCollections.List
, которые возвращаютList
.