如何在 Ada 中重载下标/子程序调用运算符

问题描述 投票:0回答:1

我们都知道并喜爱

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
的行为。我完全不知道如何重载下标运算符,尽管很明显这是可能的。

operator-overloading ada
1个回答
0
投票

Vector
定义了索引方面
Constant_Indexing
Variable_Indexing
。这些方面可以由您自己的类型定义,以便自己重载下标运算符。

参考:4.1.6 用户定义索引

信用:垃圾之神

© www.soinside.com 2019 - 2024. All rights reserved.