2012-10-30 20 views
2

在Ada中有三種傳遞參數的「正常」模式:in,outin out。 但是接下來有第四種模式,access ... 有什麼需要的地方? (即,否則將是不可能的)`access`參數模式的用處是什麼?

現在,我知道GNAT JVM Ada編譯器在導入的[庫]規範中使用它們非常繁重。 (另外,它們可以被看作是C/C++翻譯必不可少的東西。)

+0

顯然,他們在做什麼阿達稱指針。這可以理解爲使用它們創建與C庫的綁定是最容易的。 – millimoose

+0

@millimoose:對,'access'不是參數模式。 –

回答

4

訪問模式的主要驅動之一是解決了Ada 2012之前的功能參數只能是模式'in'。

因此,儘管仍有可能存在合適解決方案的區域,或許還需要綁定,但Ada 2012對允許的功能參數模式的放寬現在包含'進入'可能會顯着減少對訪問模式的需求。

3

無論有什麼其他用途,我都喜歡在編寫綁定到C API的指針時使用它們(當且僅當0不是C方的該參數的有效值時)。

這種方式在Ada方面我可以處理一個漂亮的對象,而不是一個凌亂的容易出錯的指針。

當然,您可以在綁定中指定該參數是通過引用傳遞的,這會得到相同的結果。

+0

我喜歡這個答案,但用c-side/Ada方面的例子會更好。 – Shark8

+2

您現在不得不說'not null access'以獲得空排除。 –

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 
+0

我已經玩過流媒體閱讀和寫作 - 它確實是一個方便的工具(但我希望我在這方面做得更好)。 – Shark8

相關問題