Generics 如何(可以?)基于“a”导出Ada类型;新";从泛型输入?
我很确定这是一个新Ada人的陷阱。我觉得有一些简单的事情需要做对。我有一些较旧的代码,其中包含基于Ada.Strings.Bounded泛型模块的Send\u Command过程的声明,该过程具有Command\u String\u Type类型参数 旧的Generics 如何(可以?)基于“a”导出Ada类型;新";从泛型输入?,generics,declaration,ada,Generics,Declaration,Ada,我很确定这是一个新Ada人的陷阱。我觉得有一些简单的事情需要做对。我有一些较旧的代码,其中包含基于Ada.Strings.Bounded泛型模块的Send\u Command过程的声明,该过程具有Command\u String\u Type类型参数 旧的 ----command.ads---- --与此无关,Send_命令在模块内部。 : ----command.adb---- --键入以在构造命令时保留要发送的命令。 包命令\u字符串\u类型为 新的Ada.Strings.Bounded.G
----command.ads----
--与此无关,Send_命令在模块内部。
:
----command.adb----
--键入以在构造命令时保留要发送的命令。
包命令\u字符串\u类型为
新的Ada.Strings.Bounded.Generic_Bounded_Length(Max=>Command_Max);
:
:
程序发送命令(
命令字符串:在命令字符串中(类型为有界字符串);
此:命令\u字符串\u类型用作此模块必须从此模块导出的发送\u命令过程的参数类型
当我试图在模块规范(.ads)文件中声明命令字符串类型时,我的问题就来了。我无法直接获取“导出”此过程的类型规范的语法
目标
----command\u interface.ads----
软件包命令_接口不可用
命令_Max:常数:=200;
:
--想要。。。从此模块导出命令\字符串\类型
--键入以在构造命令时保留要发送的命令。
包命令\u字符串\u类型为
新的Ada.Strings.Bounded.Generic_Bounded_Length(Max=>Command_Max);
:
:
程序发送命令(
命令字符串:在命令字符串中(类型为有界字符串);
:
结束命令_接口;——规范
----command_interface.adb----
包体命令\u接口不可用
:
程序发送命令(
命令\u字符串:在命令\u字符串\u类型中。有界\u字符串)
是
开始
:
--实施。。。
:
结束发送命令;
终端命令接口--包裹
很自然,Ada-95编译器需要如上所示的“命令字符串类型”。想要将Send_命令过程放入Command_接口包中。并将其导出以供其他模块使用。此过程取决于命令\u字符串\u类型
- 这就是上面“目标”标题下的代码
到目前为止,我五个人都没有。我一直在阅读书籍和阅读培训笔记,我很失望我找不到从有界字符串“导出”字符串类型的示例——当然,我仍在寻找,但我开始怀疑我所认为的是否像在其他语言中一样简单。Ada是否允许这样做。提前感谢您的建议。您建议的规格看起来不错:
带有Ada.Strings.Bounded;
软件包命令_接口不可用
命令_Max:常数:=200;
包命令\u字符串\u类型为
新的Ada.Strings.Bounded.Generic_Bounded_Length(Max=>Command_Max);
程序发送命令
(命令字符串:在命令字符串类型中。有界字符串);
终端命令接口;
身体也是如此(当然,这是一个演示):
带有Ada.Text\u IO;
包体命令\u接口不可用
程序发送命令
(命令字符串:在命令字符串类型中。有界字符串)为
开始
Ada.Text_IO.Put_行(命令字符串类型)到字符串(命令字符串));
结束发送命令;
终端命令接口;
现在我们开始使用它。您已经在Command\u Interface
的可见部分创建了包Command\u String\u Type
,因此可以将其引用为Command\u Interface。Command\u String\u Type
:
带命令界面;
程序检查\u命令\u接口不可用
开始
命令\接口。发送\命令
(Command_Interface.Command_String_Type.To_Bounded_String(“hello!”);
结束检查命令界面;
你可能认为这一切都有点冗长。您可以缩短实例化的名称,例如
package命令无效
新的Ada.Strings.Bounded.Generic_Bounded_Length(Max=>Command_Max);
或者你可以在通话附近使用软件包重命名技巧
程序检查\u命令\u接口\u 2
包CICST重命名命令\接口。命令\字符串\类型;
开始
Command_Interface.Send_Command(CICST.To_-Bounded_字符串(“hello!”);
结束检查\u命令\u接口\u 2;
或者,您可以过火地使用:
程序检查\u命令\u接口\u 3
使用命令\接口。命令\字符串\类型;
开始
Command_Interface.Send_命令(发送到字符串(“hello!”);
结束检查\u命令\u接口\u 3;
您建议的规范看起来不错:
带有Ada.Strings.Bounded;
软件包命令_接口不可用
命令_Max:常数:=200;
包命令\u字符串\u类型为
新的Ada.Strings.Bounded.Generic_Bounded_Length(Max=>Command_Max);
程序发送命令
(命令字符串:在命令字符串类型中。有界字符串);
终端命令接口;
身体也是如此(当然,这是一个演示):
带有Ada.Text\u IO;
包体命令\u接口不可用
程序发送命令
(命令字符串:在命令字符串类型中。有界字符串)为
开始
Ada.Text\u IO.Put\u行(命令字符串类型到字符串