5

我正在尝试对许多个月前的旧 C++ 代码进行一些基本的翻译来学习 Ada,但对于如何使用内置的 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;

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

4

1 回答 1

11

Generic_Sorting是一个内部包,Ada.Containers.Vectors不能显式with编辑(正如您所发现的那样)。并且由于Ada.Containers.Vectors它本身是一个通用包,因此Generic_Sorting是. 因此,您可以通过在实例名称前面加上前缀来访问它:Ada.Containers.Vectors

package IVSorter is new IntegerVector.Generic_Sorting;
于 2018-12-05T05:57:37.750 回答