下面的包P
在其中声明了两个私有类型,紧接着是一个带有任一类型参数的子程序。两种类型都有标记,但仅限于私密标记。尽管如此,编译器仍抱怨Proc
只能在一种类型中进行调度。因此,private
不会“隐藏”标记,并且可能会将Proc
解释为两个标记类型候选的原始操作?也许这是因为身体最终将采用实际标记的对象。另一方面,'Class
无法添加到参数配置文件中。
当尝试以尽可能简单的方式解决问题时,我只能想到嵌套包,将其中一个类型屏蔽掉,或者使Proc
非基元。然后,视觉干扰的顺序增加,后者
package P is
type T1 is private;
type T2 is private;
procedure Proc (A : T1; B : out T2); -- !
package Not_Dispatching is
procedure Proc (A : T1; B : out T2);
end Not_Dispatching;
private
type T1 is tagged null record;
type T2 is tagged null record;
end P;
和前者:
package PP is
type T1 is private;
package Exclude_From_Dispatching is
type T2 is private;
private
type T2 is tagged null record;
end Exclude_From_Dispatching;
use Exclude_From_Dispatching;
procedure Proc (A : T1; B : out T2);
private
type T1 is tagged null record;
end PP;
丑陋似乎表明全面重组。还有其他一些更简单的方法吗?