`access`参数模式的用处是什么?

时间:2012-10-30 19:22:15

标签: pointers parameters parameter-passing ada

有三个正常的' Ada中传递参数的模式:inoutin out。 但是那时还有第四种模式,access ...... 是否还有其他需要的模式? (即不可能的东西。)

现在,我知道GNAT JVM Ada编译器在导入的[库]规范中大量使用它们。 (另外,它们可以被认为是C / C ++翻译的必要条件。)

3 个答案:

答案 0 :(得分:4)

访问模式的主要驱动因素之一是解决限制问题,在Ada 2012之前,功能参数只能是'in'模式。

因此,虽然可能仍然存在一些适当的解决方案,也许在绑定方面,Ada 2012放宽允许的功能参数模式,现在包括“in out”,可能会大大减少对访问模式的需求。

答案 1 :(得分:3)

无论其他用途是什么,我都喜欢在编写绑定到C API的绑定时使用它们(当且仅当0不是C侧该参数的有效值时) )。

这种方式在Ada方面我可以处理一个漂亮的对象,而不是一个容易出错的错误指针。

当然你可以在绑定中指定参数是通过引用传递的,这会让你得到同样的东西。

答案 2 :(得分:1)

在我的最新项目中,到目前为止我唯一需要使用access 的时间是在定义我自己的流子程序时ReadWriteX'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