Le point d'un être générique qui « il » fonctionne avec tout type, et celui de Text_IO
étant que cela fonctionne avec les types connus lors de l'appel de ses sous-programmes , c'est-à-dire les chaînes, vous avez besoin d'autre chose de générique pour imprimer n'importe quel type. Donc, soit passer une fonction spéciale qui transforme de votre type à String
, comme répondu par Jim Rogers. Ou, passez un paquet formel générique avec My_Type, pour l'impression. Par exemple.
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;
Ainsi, avec un type de devenir un type réel générique de TestType
, il y aura un paquet pour devenir un véritable paquet générique de TestType
. Ils correspondent. Dans une instance de TestType
, vous pouvez ensuite les utiliser ensemble.
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);
Si vous fournissez un paquet d'impression tels que Any_Type_IO, l'impression devient générique dans les deux sens: il est le travail d'un paquet d'impression correspondant, et il doit aussi correspondre à un paquet formel générique dans le sens Ada.