在ada中键入转换

时间:2011-04-09 09:52:12

标签: ada

我有一个包,我将字符串转换为整数:

param: integer;
begin
param:= Integer'Value(param_string);

我的问题很简单,我想做同样的事情,但是使用通用软件包。泛型类型是TypeElement。但是我不能这样做:

param: TypeElement;
begin
param:= TypeElement'Value(param_string);

错误是'前缀',值“属性必须是标量类型”

有诀窍吗?

1 个答案:

答案 0 :(得分:3)

您为TypeElement提供的通用形式类型必须表示标量类型。

如果你宣称它是私人的,例如:

generic
   type TypeElement is private;

然后这不起作用,因为不能保证TypeElement将成为标量类型,正如您所发现的那样,需要使用'Value属性。您需要对离散类型使用一种通用形式类型表示,如Ada LRM 12.5.2中所列。

例如:

generic

   type Type_Element_Discrete is (<>);
   type Type_Element_Signed_Int is range <>;
   type Type_Element_Mod is mod <>;
   type Type_Element_Digits is digits <>;
   type Type_Element_Delta is delta <>;
   type Type_Element_Delta_Digits is delta <> digits <>;

package Gen_Convert is

   function Gen_Convert (Param_String : String) return Type_Element_Discrete;
   function Gen_Convert (Param_String : String) return Type_Element_Signed_Int;
   function Gen_Convert (Param_String : String) return Type_Element_Mod;
   function Gen_Convert (Param_String : String) return Type_Element_Digits;
   function Gen_Convert (Param_String : String) return Type_Element_Delta;
   function Gen_Convert (Param_String : String) return Type_Element_Delta_Digits;

end Gen_Convert;

指定适当的形式类型还可确保泛型的实例化器提供有效类型。这是相应的机构,展示了“价值转换:

package body Gen_Convert is

   function Gen_Convert (Param_String : String) return Type_Element_Discrete is
   begin
      return Type_Element_Discrete'Value(Param_String);
   end Gen_Convert;

   function Gen_Convert (Param_String : String) return Type_Element_Signed_Int is
   begin
      return Type_Element_Signed_Int'Value(Param_String);
   end Gen_Convert;

   function Gen_Convert (Param_String : String) return Type_Element_Mod is
   begin
      return Type_Element_Mod'Value(Param_String);
   end Gen_Convert;

   function Gen_Convert (Param_String : String) return Type_Element_Digits is
   begin
      return Type_Element_Digits'Value(Param_String);
   end Gen_Convert;

   function Gen_Convert (Param_String : String) return Type_Element_Delta is
   begin
      return Type_Element_Delta'Value(Param_String);
   end Gen_Convert;

   function Gen_Convert (Param_String : String) return Type_Element_Delta_Digits is
   begin
      return Type_Element_Delta_Digits'Value(Param_String);
   end Gen_Convert;

end Gen_Convert;