We all know and love
Ada.Containers.Vectors. Here's an example of its usage:
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 question is simple: how does
My_Vec (0) work, and how can I recreate this behavior in a type of my own?
I have been searching the internet for a while but I can't find to seem any explanation for how this expression works. The subscript operator, which uses the same syntax as the function call operator, cannot be overloaded using the normal syntax for operator overloading. I've read the package specification for
Ada.Containers.Vectors, and there doesn't seem to be any explicit means through which
Vector overloads this operator. I had guessed that the
Element function might have something to do with it, but have been unable to use it to define a type of my own that replicates
Vector's behavior. I'm at a complete loss on how to overload the subscript operator, even though it is clear that it is possible.