我想在 Ada.sequential_IO 上添加包装或外观。这有点难看,但我正在尝试使用一些自动翻译的代码。所以我得到了:
with Ada.sequential_IO;
generic
type element_type is private;
package queue_file is
package implementation is new Ada.sequential_IO (element_type);
subtype instance is implementation.file_type;
function eofQ (channel : instance) return Boolean renames implementation.end_of_file;
procedure readQ (channel : in instance; item : out element_type) renames implementation.read;
-- etc.
end queue_file;
这一切都很好,但名称 queue_file.implementation 是可见的。我试图将它移到私有部分并写包实现是私有的,但它没有它。那么有什么方法可以隐藏这个名字吗?
答案 0 :(得分:2)
你不能做你想做的事情,至少不能打破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;