我希望能够为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;
答案 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
。