我在创建粗指针时遇到问题。我当前的声明集如下所示:
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
避免使用。