如何在Ada中为向量实现Generic_Sorting?

时间:2018-12-05 04:28:58

标签: ada gnat gnat-gps ada2012

我试图从许多月前开始对旧的C ++代码进行一些基本的翻译,以学习Ada,而我对如何使用内置的Generic_Sorting对向量进行排序一无所知。我还没有找到任何实际的实例,最近的是一篇现已失效的丹麦Wiki文章,看起来它已经有了完整的例子,但档案库没有把它抓起来:{{3} }

这是我认为应该从上面的链接工作的代码:

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;

我尝试了usewith的许多不同组合,但是我所能得到的只是各种错误代码。上面的代码给出了Generic_Sorting is not visible,但是当我尝试显式声明with Ada.Containers.Vectors.Generic_Sorting时出现错误"Ada.Containers.Vectors.Generic_Sorting" is not a predefined library unit。我不知道我在这里做错了什么,我敢肯定这是对Ada引入软件包方式的根本误解,我希望将其确定下来将有助于我更好地理解它。

1 个答案:

答案 0 :(得分:10)

Generic_Sorting是Ada.Containers.Vectors的内部包,不能显式使用(如您所知)。由于Ada.Containers.Vectors本身是一个通用包,因此Generic_Sorting是Ada.Containers.Vectors实例化的内部包。因此,您可以通过在实例名称前添加前缀来实现: 包IVSorter是新的IntegerVector.Generic_Sorting;