2

Adaには、パラメータを渡す3つの「通常の」モードがあります。 in、、、outおよびin out。しかし、それから4番目のモードがありaccessます…それらが必要とされる何かがありますか? (つまり、そうでなければ不可能なことです。)

さて、GNATJVMAdaコンパイラがインポートされた[ライブラリ]仕様でそれらをかなり頻繁に使用していることを私は知っています。(また、それらは間違いなくC / C ++翻訳に不可欠であると見なされる可能性があります。)

4

3 に答える 3

4

アクセスモードの主な推進要因の1つは、Ada 2012より前は、関数パラメーターはモード'in'のみであるという制限を回避することでした。

したがって、おそらくバインディングにおいて、それらが適切な解決策である領域はまだあるかもしれませんが、Ada 2012で許可された関数パラメーターモードを緩和して「inout」を含めることで、アクセスモードの必要性を大幅に減らすことができます。

于 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 に答える