我们都知道并喜爱
Ada.Containers.Vectors
。这是其用法的示例:
with Ada.Text_IO;
with Ada.Containers.Vectors;
procedure Example is
use Ada.Text_IO;
package Vectors_Integer is new Ada.Containers.Vectors (Natural, Integer);
use Vectors_Integer;
My_Vec : Vector := 1 & 2 & 3;
begin
Put_Line (Integer'Image (My_Vec (0)));
end Example;
我的问题很简单:
My_Vec (0)
如何工作,以及如何以我自己的类型重新创建这种行为?
我已经在互联网上搜索了一段时间,但我找不到任何关于这个表达式如何工作的解释。下标运算符与函数调用运算符使用相同的语法,无法使用运算符重载的正常语法进行重载。我已经阅读了
Ada.Containers.Vectors
的包规范,并且似乎没有任何明确的方法可以让 Vector
重载该运算符。我曾猜测 Element
函数可能与此有关,但无法使用它来定义我自己的类型来复制 Vector
的行为。我完全不知道如何重载下标运算符,尽管很明显这是可能的。
Vector
定义了索引方面 Constant_Indexing
和 Variable_Indexing
。这些方面可以由您自己的类型定义,以便自己重载下标运算符。
参考:4.1.6 用户定义索引
信用:垃圾之神