2

在 Ada 中有三种“正常”的参数传递模式:inoutin out. 但是还有第四种模式,access……有什么需要它们的吗? (即原本不可能的事情。)

现在,我知道 GNAT JVM Ada 编译器在导入的 [库] 规范中大量使用了它们。(此外,可以说它们对于 C/C++ 翻译至关重要。)

4

3 回答 3

4

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

因此,尽管在某些领域它们可能仍然是合适的解决方案,但可能在绑定中,Ada 2012 将允许的函数参数模式放宽到现在包括“in out”,这可能会显着减少对访问模式的需求。

于 2012-10-30T19:48:01.623 回答
3

不管它们有什么其他用途,我更喜欢在编码绑定到接收指针的 C API 时使用它们(当且仅当 0 不是 C 端该参数的有效值时)。

这样在 Ada 方面,我可以处理一个不错的对象,而不是一个容易出错的凌乱指针。

当然,您可以只在绑定中指定参数是通过引用传递的,这也是同样的事情。

于 2012-10-30T20:15:46.667 回答
1

access 在我最新的项目中,到目前为止,我唯一需要使用的是在定义我自己的流子程序(Read、、WriteX'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
于 2012-11-02T02:28:58.840 回答