使用长度和大小参数声明固定长度字符串数组

时间:2014-04-03 02:33:45

标签: arrays ada

我希望能够为GTK ComboBox声明一个固定长度字符串的常量数组。是否可以在ADA中使用两个参数?

此代码允许通过声明字符串来设置数组的大小。是否有可能以某种方式用参数替换规范中的常量?

一个简单的数组不允许判别。 判别式记录不允许使用匿名数组。

编辑:

我可以以某种方式声明与表单等效的类型:

type ArrayOfStrings(sringlength:positive;                      arraysize:positive)array(1..arraysize)of                                          string(1..stringlength);

这种形式是不可能的,因为数组不能有判别式。

OR

子类型SelectorString是字符串;

类型SelectorStringArray(arraysize:positive; stringlength:positive)是记录              stringarray:SelectorString的数组(1..arraysize)(1..stringlength);           结束记录;

这种形式是不可能的,因为记录不能有匿名数组。

已经回答了:

以下作品,

包Selectors.Strings是

子类型ArrayIndex是正范围1..64; - ComboBox中的最大条目

子类型TextIndex是正范围1..32; - 最长入场时间

类型SelectorStringArray是数组(arrayindex范围<&gt ;,textindex范围<>)                           性格;

function StringSelector(stringarray:SelectorStringArray)return ArrayIndex;

sel:SelectorStringArray:=(“aa”,“bb”,“cc”,“dd”);

结束Selectors.Strings;

sel中的字符串必须都是相同的长度。

谢谢,

老工程师

package Selectors.Strings is

    SelectorStringLength : constant := 2;

    subtype SelectorString is string( 1..SelectorStringLength );

    type    SelectorStringArray is array( positive range <> ) of SelectorString;

    subtype SelectorStringIndex is positive;

    function    StringSelector( stringarray : SelectorStringArray ) return SelectorStringIndex;

    selectarray : SelectorStringArray := ( "aa", "bb", "cc", "dd" );

end Selectors.Strings;

1 个答案:

答案 0 :(得分:0)

我不清楚你在寻找什么,但你在上面的代码中没有任何匿名数组,你可以有一个判别记录type的组件是名为的数组类型。所以我不确定你的陈述是什么&#34;判别记录不允许匿名数组&#34;指的是。

假设selectarray最多可包含100个字符串:

subtype Select_Array_Size is Integer range 0 .. 100;  

type Selector_Strings (Size : Select_Array_Size := 0) is record
    Data : SelectorStringArray (1 .. Size);
end record;

procedure Set_Select_Array (Data : SelectorStringArray);

selectarray : Selector_Strings;  -- will be initialized with Size=>0, 
                                 -- Data=>an array of length 0

并在体内

procedure Set_Select_Array (Data : SelectorStringArray) is
begin
    selectarray := (Size => Data'Length, Data => Data);
end Set_Select_Array;

然后使用selectarray.Data代替selectarray来访问数据。

您需要最大数组长度,因为某些编译器将为Data的{​​{1}}组件分配尽可能大的空间。

另一个选项是使Selector_Strings成为数组类型的selectarray