Sujet : Re: Question de généricité
De : gautier_niouzes (at) *nospam* hotmail.com (Gautier write-only address)
Groupes : fr.comp.lang.adaDate : 31. Aug 2023, 23:18:49
Autres entêtes
Message-ID : <a98095df-01d5-45ef-8bd3-ac2968e0a344n@googlegroups.com>
References : 1 2 3 4 5
User-Agent : G2/1.0
Je ne comprends pas "nul : Item_Type" dans les paramètres génériques. A
quoi sert cette ligne ?
Enlève-la et essaie de compiler!
Oui, ça compile pas. Mais ça ne répond pas à ma question ;)
Sans cette ligne, le compilateur ne sait pas du tout ce que peut signifier ce truc qui s'appelle "nul", là où il y a ":= nul;"
Évidemment, dans l'instanciation particulière que tu as en tête, ce "nul" est bien un octet de valeur 0, et même provenant de Interfaces.C, surtout qu'il porte par hasard le même nom.
Mais c'est une coïncidence et ton intuition fait son travail.
Tu pourrais avoir dans le code générique "terminator" au lieu de "nul".
Result (Index_Type (Item'Length + 1)) := terminator;
Dans ce cas, que signifie ou vaut "terminator"? Valeur ? Fonction?...
Tu peux avoir n'importe quel type comme Item_Type.
Un exemple simple:
type U32 is mod 2**32;
type Float_Array is array (U32 range <>) of aliased Float;
function To_Float (c : Character) return Float is (Float (Character'Pos (c)));
function To_TW_Float is new To_TW_STR (Float, 3.1415927, U32, Float_Array, To_Float);
Tu peux avoir qqch d'un peu plus compliqué:
type My_Item is record a, b, c : Float; d: Positive; end record;