gpt4 book ai didi

ada - ada中的类型转换

转载 作者:行者123 更新时间:2023-12-04 21:11:35 26 4
gpt4 key购买 nike

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

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

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

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

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

有什么技巧吗?

最佳答案

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

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

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;

指定适当的正式类型还可以确保泛型的实例化器提供有效类型。这是展示“值(value)转换”的相应主体:

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;

关于ada - ada中的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5604267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com