簡體   English   中英

如何在ada中打印通用類型?

[英]How to print a generic type in ada?

我當前正在嘗試打印(“ Ada.Text_IO.Put”)泛型類型,但這總是失敗,並顯示如下錯誤:

missing argument for parameter "Item" in call to "Put" declared at a-tiinio.ads:60, instance at a-inteio.ads:18
expected type "Standard.Integer"
found private type "My_Type" defined at testtype.ads:2

這些錯誤是有道理的,但我不知道如何打印我的值。 以下幾行顯示了我的通用類型。

generic
    type My_Type is private;
    with function "+"(Left: My_Type; Right: My_Type) return My_Type;

package TestType is
    ...
end TestType;

謝謝你的幫助!

您可以要求另一個通用參數,例如:

with function image(Item : in My_Type) return String;

然后只需打印Image函數輸出的字符串。

實際參數的示例可能是:

image => Integer'Image

泛型的要點是“它”可以與任何類型一起使用,而Text_IO是它可以與調用其子程序時已知的類型(即字符串)一起使用,您需要其他泛型來打印任何類型。 因此,要么傳遞一個特殊的函數,將您的類型轉換為String ,就像Jim Rogers回答的那樣。 或者,將常規形式的程序包與My_Type一起傳遞以進行打印。 例如。

generic
    type Any_Type is private;
package Any_Type_IO is
    procedure Put (Item : Any_Type);
    procedure Get (Item : out Any_Type);
end Any_Type_IO;

with Any_Type_IO;
generic
    type My_Type is private;
    with function "+"(Left: My_Type; Right: My_Type) return My_Type;
    with package Printer is new Any_Type_Io (Any_Type => My_Type);
package TestType is
    procedure Run_Test;
end TestType;

因此,連同將成為TestType的通用實際類型的TestType ,將有一個包將成為TestType的通用實際程序包。 他們匹配。 然后在TestType實例中,可以將它們一起使用。

type T is range 1 .. 10;
package T_IO is new Any_Type_IO (T);

package My_Test_Instance is new TestType
  (My_Type => T,
   "+"     => "+",
   Printer => T_IO);

如果提供打印包,例如Any_Type_IO,則打印在兩種意義上都是通用的:這是任何匹配的打印包的工作,並且它也必須在Ada意義上匹配通用的正式包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM