Как вы реализуете Generic_Sorting в Ada для вектора? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь сделать некоторые базовые переводы старого кода C ++ от многих лун назад, чтобы выучить Аду, и я был совершенно ошарашен тем, как сортировать вектор с помощью встроенного Generic_Sorting.Я не смог найти никаких конкретных примеров этого в действии, наиболее близкой из которых является ныне несуществующая датская вики-статья, которая выглядит так, как будто бы у нее был полный пример, но архив ее не схватил: https://web.archive.org/web/20100222010428/http://wiki.ada-dk.org/index.php/Ada.Containers.Vectors#Vectors.Generic_Sorting

Вот код, который, как я думал, должен работать по приведенной выше ссылке:

with Ada.Integer_Text_IO;    use Ada.Integer_Text_IO;
with Ada.Strings.Unbounded;  use Ada.Strings.Unbounded;
with Ada.Containers.Vectors; use Ada.Containers;

procedure Vectortest is
   package IntegerVector is new Vectors
     (Index_Type   => Natural,
      Element_Type => Integer);
   package IVSorter is new Generic_Sorting;

   IntVec : IntegerVector.Vector;
   Cursor : IntegerVector.Cursor;
begin
   IntVec.Append(3);
   IntVec.Append(43);
   IntVec.Append(34);
   IntVec.Append(8);

   IVSorter.Sort(Container => IntVec);

   Cursor := IntegerVector.First(Input);
   while IntegerVector.Has_Element(Cursor) loop
      Put(IntegerVector.Element(Cursor));
      IntegerVector.Next(Cursor);
   end loop;

end Vectortest;

Я пробовал так много разных комбинаций use и with, но все, что я могу получитьразличные коды ошибок.Код выше дает Generic_Sorting is not visible, но когда я пытаюсь явно указать with Ada.Containers.Vectors.Generic_Sorting, я получаю ошибку "Ada.Containers.Vectors.Generic_Sorting" is not a predefined library unit.Я понятия не имею, что я делаю здесь не так, я уверен, что это фундаментальное недопонимание того, как Ада вносит пакеты, и я надеюсь, что это поможет мне понять это немного лучше.

1 Ответ

0 голосов
/ 05 декабря 2018

Generic_Sorting является внутренним пакетом для Ada.Containers.Vectors и не может быть явно with ed (как вы обнаружили).А поскольку Ada.Containers.Vectors сам по себе является универсальным пакетом, Generic_Sorting является внутренним пакетом для экземпляра из Ada.Containers.Vectors.Таким образом, вы можете достичь его, добавив префикс к имени экземпляра:

package IVSorter is new IntegerVector.Generic_Sorting;
...