如何在Ada中为通用的,用户定义的类型指定特定索引?

时间:2016-02-20 16:11:32

标签: generics ada

所以我有一个带有用户定义的形式参数的通用包:

type element is (<>);

该类型是离散的,因为我在整个程序中使用它作为索引。所以,假设我有两个不同的数组,其中一个我可以像这样放“元素”:

array1 : array (element) of integer;

和第二个数组,其中起始索引比array1的索引少一个,假设是这样写的:

array2 : array (1_less_than_element .. element) of integer;

我如何指定我希望array2以比array1少一个索引值的方式启动?

另外,值得一提的是我的程序是关于拓扑排序的,并且在开始时我要获得要排序的关系总数(NR)。以前,当我相信程序不一定是通用的,一切都涉及整数时,我只是说:

array1 : array (1 .. NR) of integer;
array2 : array (0 .. NR) of integer;

然而,现在它是通用的,我不知道如何指定等价,因为规范似乎表明索引必须是类型元素。

1 个答案:

答案 0 :(得分:1)

我相信我找到了解决方案。为了后人,我会继续在这里发布答案。如果我弄错了或有更好的方式等,请发帖和/或告诉我。

由于离散类型是Ada中标量类型的后代,因此它继承了标量类型的属性。一个这样的属性是Scalar'Pred(Arg:X),它在枚举类型中返回X之前的值。对于数字类型,它基本上只是递减索引。