太いポインターの作成に問題があります。私の現在の一連の宣言は次のようになります。
type Index_Typ is mod 20; -- will be larger in real life
type Data_Buffer_Typ is array (Index_Typ range <>) of Integer; --unconstrained array type
type Data_Buffer_Ptr is access all Data_Buffer_Typ; -- a thick pointer, contains the bounds of array subtype pointed to and address..
Data_Buffer : aliased Data_Buffer_Typ (Index_Typ) := (others => 0); -- this is private
type Result_Typ is (Ok, Overflow, Null_Pointer);
procedure Retrieve (Index : in Index_Typ;
Len : in Index_Typ;
Data_Ptr : out Data_Buffer_Ptr;
Result : out Result_Typ) is
begin
-- assuming range checks are ok, what goes here ?
end Retrieve;
だから私が宣言した場合:
Ptr : Data_Buffer_Ptr := null;
の呼び出しが与えられたRetreive (2,3, Ptr,Result);
場合、要素 2、3、および 4 を指すポインターで終わる方法はData_Buffer
?
ノート:
- はい、とにかく配列スライスを渡すことはおそらくポインターとして行われることを知っていますが、暗黙的にではなく、明示的にポインターを使用したいと考えています (私の選択ではありません!)。
- はい、実験しましたが、通常は : (
object subtype must statically match designated subtype
) エラー メッセージが表示されます。 - 可能な限り の使用は
new
避けてください。