protected objectのprivateが微妙に不便な件
protected内のprivateな部分に型の定義を宣言することは出来ないのだが、これが微妙にイライラする。
with Ada.Containers.Indefinite_Doubly_Linked_Lists;
package Message_Buffers is
type Private_Buffer is private; -- 別に公開したくない
protected type Message_Buffer is
entry Write(Item : String);
entry Read(Item : out String);
private
-- ここに書けない!
-- type String_Access is access all String;
-- package String_Access_Lists is new Ada.Containers.Indefinite_Doubly_Linked_Lists(String_Access);
Buffer : Private_Buffer;
end Message_Buffer;
private
type String_Access is access all String;
package String_Access_Lists is new Ada.Containers.Indefinite_Doubly_Linked_Lists(String_Access);
type Private_Buffer is new String_Access_Lists.List with null record; -- ずいぶん冗長なことに
end Message_Buffers;
Private_Buffer
自体は内部でしか使わないので、外に公開したくな。しかし、Message_Buffer
を公開する以上、それに先だって宣言しなければエラーとなる。private
だけ分割できないものか。