有三个正常的' Ada中传递参数的模式:in
,out
和in out
。
但是那时还有第四种模式,access
...... 是否还有其他需要的模式?
(即不可能的东西。)
现在,我知道GNAT JVM Ada编译器在导入的[库]规范中大量使用它们。 (另外,它们可以被认为是C / C ++翻译的必要条件。)
答案 0 :(得分:4)
访问模式的主要驱动因素之一是解决限制问题,在Ada 2012之前,功能参数只能是'in'模式。
因此,虽然可能仍然存在一些适当的解决方案,也许在绑定方面,Ada 2012放宽允许的功能参数模式,现在包括“in out”,可能会大大减少对访问模式的需求。
答案 1 :(得分:3)
无论其他用途是什么,我都喜欢在编写绑定到C API的绑定时使用它们(当且仅当0不是C侧该参数的有效值时) )。
这种方式在Ada方面我可以处理一个漂亮的对象,而不是一个容易出错的错误指针。
当然你可以在绑定中指定参数是通过引用传递的,这会让你得到同样的东西。
答案 2 :(得分:1)
在我的最新项目中,到目前为止我唯一需要使用access
的时间是在定义我自己的流子程序时Read
,Write
,X'Class'Output
等。)。这些函数需要not null access Ada.Streams.Root_Stream_Type'Class
作为参数。
例如:
package Example is
type Printable_Type is private;
procedure Print_Printable(
Stream : not null access Ada.Streams.Root_Stream_Type'Class;
Print : in Printable_Type);
for Printable_Type'Write use Print_Printable;
end Example