ada中的类型转换

ada中的类型转换,ada,Ada,我有一个包,其中我使用以下命令将字符串转换为整数: param: integer; begin param:= Integer'Value(param_string); 我的问题很简单,我想做同样的事情,但是使用一个通用的包。泛型类型是TypeElement。但是我不能这样做: param: TypeElement; begin param:= TypeElement'Value(param_string); 错误为“value”属性的前缀必须是标量类型” 有什么诀窍吗?为TypeEleme

我有一个包,其中我使用以下命令将字符串转换为整数:

param: integer;
begin
param:= Integer'Value(param_string);
我的问题很简单,我想做同样的事情,但是使用一个通用的包。泛型类型是TypeElement。但是我不能这样做:

param: TypeElement;
begin
param:= TypeElement'Value(param_string);
错误为“value”属性的前缀必须是标量类型”


有什么诀窍吗?

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

如果您将其声明为私有,例如:

generic
   type TypeElement is private;
那就行不通了,因为不能保证TypeElement是标量类型,正如您所发现的,使用“Value”属性需要标量类型。您需要为离散类型使用一种通用的形式化类型表示,如中所列

例如:

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;

谢谢。但我的问题是TypeElement可以是整数或字符串。我必须将type设置为private才能做到这一点,不是吗?'Value属性对整数无效,因此无法构造一个泛型来依赖它从TypeElement中提取整数值。(是的,TypeElement必须是私有形式类型才能接受整数或字符串实际类型)。但是,如果泛型还需要一个“Value Of”函数:“with Value Of(T:TypeElement)return String”,那么实例化器将提供TypeElement和一个Value Of函数(可以使用'Value'),并且泛型包将调用Value Of()将字符串转换为整数,或者只返回整数。在上面的注释中,我错误地输入了()函数的建议值的返回类型,它应该是:
,值为(T:TypeElement)return Integer
。(编辑注释的时间不足。)也值得使用“valid”检查您的浮点/定点类型,因为并非所有位模式都是有效的浮点数。通常,除非有人对注释投了赞成票,否则我会将注释文本复制到剪贴板,删除注释,然后重新提交(使用修复)。
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;