你不能做你想做的事,至少不能打破对implementation
由subtype instance is implementation.file_type;
例子:
private with Ada.Sequential_IO;
generic
type element_type is private;
package queue_file is
type instance is limited private;
function eofQ (channel : instance) return Boolean;
procedure readQ (channel : in instance; item : out element_type);
-- SUBPROGRAMS FOR SEQUENTIAL_IO INTERFACE --
procedure Open
(File : in out instance;
Name : String;
Write: Boolean;
Form : String := "");
procedure Read (File : instance; Item : out Element_Type);
procedure Write (File : instance; Item : Element_Type);
-- etc.
private
package implementation is new Ada.sequential_IO (element_type);
type instance is new implementation.file_type;
end queue_file;
和
Pragma Ada_2012;
package body queue_file is
function eofQ (channel : instance) return Boolean is
( implementation.end_of_file( implementation.File_Type(channel) ) );
procedure readQ (channel : in instance; item : out element_type) is
use implementation;
begin
implementation.read( File_Type(Channel), item );
end readQ;
procedure Open
(File : in out instance;
Name : String;
Write: Boolean;
Form : String := "") is
use implementation;
begin
Open(
File => File_Type(File),
Mode => (if Write then Out_File else In_File),
Name => Name,
Form => Form
);
end Open;
-- left as an exercise
procedure Read (File : instance; Item : out Element_Type) is null;
procedure Write (File : instance; Item : Element_Type) is null;
-- etc.
end queue_file;