【发布时间】:2018-08-16 21:02:24
【问题描述】:
我有以下-简单-问题:用于表示度数的增量类型及其子类型角度,我将范围限制为 0.0 ..
package ...
type Degree is digits Degree_Digits;
end package
package ...
subtype Limited_Angle is Degree range Degree_Min .. Degree_Max;
function "+" (Left, Right : in Limited_Angle) return Limited_Angle;
end package
以及实现:
function "+" (Left, Right : in Limited_Angle) return Limited_Angle is
res : Degree;
begin
res := Units.Base.Degrees."+"(Left, Right);
...
return Limited_Angle(res);
end "+";
但我不喜欢这种方式,调用+-运算符。我的第一个想法是有类似的东西
res := Degree(Left) + Degree(Right);
但这不起作用。我的编译器警告无限递归。 更严格的:
res := (Degree(Left)) + (Degree(Right));
警告无限递归。我不明白这背后的原理。 T(S)不应该将S转换为T吗?这不可能是一个优化问题,因为 (T(S)) 也不起作用。
我是否错过了类型-子类型转换的概念(很可能),是否有人有解决方案/解释?甚至更好的解决方案?
谢谢!
【问题讨论】:
标签: types operator-overloading ada