Adaには、パラメータを渡す3つの「通常の」モードがあります。 in
、、、out
およびin out
。しかし、それから4番目のモードがありaccess
ます…それらが必要とされる何かがありますか?
(つまり、そうでなければ不可能なことです。)
さて、GNATJVMAdaコンパイラがインポートされた[ライブラリ]仕様でそれらをかなり頻繁に使用していることを私は知っています。(また、それらは間違いなくC / C ++翻訳に不可欠であると見なされる可能性があります。)
Adaには、パラメータを渡す3つの「通常の」モードがあります。 in
、、、out
およびin out
。しかし、それから4番目のモードがありaccess
ます…それらが必要とされる何かがありますか?
(つまり、そうでなければ不可能なことです。)
さて、GNATJVMAdaコンパイラがインポートされた[ライブラリ]仕様でそれらをかなり頻繁に使用していることを私は知っています。(また、それらは間違いなくC / C ++翻訳に不可欠であると見なされる可能性があります。)
アクセスモードの主な推進要因の1つは、Ada 2012より前は、関数パラメーターはモード'in'のみであるという制限を回避することでした。
したがって、おそらくバインディングにおいて、それらが適切な解決策である領域はまだあるかもしれませんが、Ada 2012で許可された関数パラメーターモードを緩和して「inout」を含めることで、アクセスモードの必要性を大幅に減らすことができます。
それらの他の用途に関係なく、ポインターを受け取るC APIへのバインディングをコーディングするときにそれらを使用するのが好きです(0がC側のそのパラメーターの有効な値でない場合のみ)。
このようにして、Ada側では、エラーが発生しやすい厄介なポインターではなく、優れたオブジェクトを処理できます。
もちろん、パラメータが参照によって渡されることをバインディングで指定するだけで、同じことができます。
私の最新のプロジェクトでは、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