私は組み込みシステムの C/C++ から来ており、関数内では常に静的変数を使用して、呼び出し全体で値が保持されるようにしています。
Ada では、これはファイル レベルの静的変数に相当するものでのみ行われるようです。Adaに相当するものはありますか。
C++:
function Get_HW_Counter() {
static int count = 0;
return ++count;
}
エイダ:??
私は組み込みシステムの C/C++ から来ており、関数内では常に静的変数を使用して、呼び出し全体で値が保持されるようにしています。
Ada では、これはファイル レベルの静的変数に相当するものでのみ行われるようです。Adaに相当するものはありますか。
C++:
function Get_HW_Counter() {
static int count = 0;
return ++count;
}
エイダ:??
パッケージ レベル変数。
パッケージは必ずしもファイル レベルではないことに注意してください。必要に応じて、サブプログラムに対してローカルなパッケージを作成して使用することもできます。パッケージの用途の 1 つは、オブジェクトとそれに作用するすべてのメソッドを作成することです (シングルトン パターン)。オブジェクトのすべての詳細を非公開にします。
C++ についての私の理解がそれほどさびていない場合、ほぼ同等のものは次のようになります。
package HW_Counter is
function Get_Next;
private
count : natural := 0; -- one way of initialising
-- or integer, allowing -ve counts for compatibility with C++
end HW_Counter;
パッケージの顧客が見る必要があるのはそれだけです。
package body HW_Counter is
function Get_Next return natural is
begin
count := count + 1;
return count;
end Get_Next;
begin -- alternative package initialisation part
count := 0;
end HW_Counter;
そして、使用法は通常
C := HW_Counter.get_next;