Import Ada:导入不等式运算符“/=&引用;

Import Ada:导入不等式运算符“/=&引用;,import,package,operator-overloading,ada,inequality,Import,Package,Operator Overloading,Ada,Inequality,我不想使用整个包,但我想导入一些功能,例如“/=”操作符。我知道,renames允许我对大多数函数执行此操作,但使用不等式运算符我得到错误,不允许显式定义不等式。如何导入此运算符而不引发错误 package Integer_Maps is new Ada.Containers.Ordered_Maps ( Key_Type => Integer, Element_Type => Integer ); -- the next line fails! function "

我不想
使用整个包,但我想导入一些功能,例如
“/=”
操作符。我知道,
renames
允许我对大多数函数执行此操作,但使用不等式运算符我得到错误,
不允许显式定义不等式
。如何导入此运算符而不引发错误

package Integer_Maps is new Ada.Containers.Ordered_Maps
(
 Key_Type => Integer,
 Element_Type => Integer
);

-- the next line fails!
function "/=" ( Left, Right: Integer_Maps.Cursor ) return Boolean
   renames Integer_Maps."/=";

你不知道!无论如何,不是直接的。重命名相等运算符
“=”
,您将免费获得不等

-- this line succeeds!
function "=" ( Left, Right: Integer_Maps.Cursor ) return Boolean
   renames Integer_Maps."=";

这类似于重写运算符。请参见,特别是静态语义

您可以使用
类型Integer\u Maps.Cursor
提供类型上运算符的可见性

对于容器游标,执行
使用所有类型的Integer\u Maps.Cursor也是可行的
提供对类型的所有基本操作的可见性,如
元素

我通常将
使用type
使用所有type
子句放在最里面的封闭范围(即子程序内部)中需要它们的地方,如下所示:

过程Foo是
使用所有类型的Integer_Maps.Cursor;
开始
对于My_Map.Iterate循环中的游标
Ada.Text\u IO.Put\u行
(整数图像(键(光标))和“->”&整数图像(元素(光标));
端环;
完富;;

“不允许显式重载不等式运算符”,第4段。@SimonWright我在下面的回答中引用了2012 LRM 6.6,但我发现有趣的是,他们在随后的一个LRM中删除/重新表述了该句子。您也可以使用
类型Integer\u Maps.Cursor@egilhh谢谢;我没有意识到这一点,但如果我使用几个容器,这会导致名称出现问题吗?不,名称应该没有问题。由于您不知道
使用类型
,我已经提交了一个关于它的答案(以及
使用所有类型
),谢谢。我昨天试过这个,但是gnat不喜欢在全局范围内使用两种不同的
Cursor
类型。今天晚些时候我在家的时候再试试这个。