Sujet : Re: Question de généricité
De : 314 (at) *nospam* drpi.fr (DrPi)
Groupes : fr.comp.lang.adaDate : 01. Sep 2023, 15:52:02
Autres entêtes
Organisation : Posted through news.alphanet.ch
Message-ID : <ucstqi$vg1$1@shakotay.alphanet.ch>
References : 1 2 3 4 5 6
User-Agent : Mozilla Thunderbird
Le 01/09/2023 à 00:18, Gautier write-only address a écrit :
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?...
Ha, voilà, c'est le "nul" qui m'a perturbé. J'ai confondu avec "null".
Des fois, il faut pas grand chose pour comprendre de travers ;)
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;
C'est pas le ItemType qui me pose problème.
Ce qui me pose problème, c'est que j'aimerais que la fonction "To_TW_STR" renvoie un type entièrement contraint.
EN reprenant les définitions de départ /
subtype t_TW_STR32 is char_array (1 .. 34);
subtype t_TW_STR64 is char_array (1 .. 66);
subtype t_TW_STR128 is char_array (1 .. 130);
subtype t_TW_STR255 is char_array (1 .. 256);
J'aimerais pouvoir instancier une fonction qui retourne "t_TW_STR32", une qui retourne "t_TW_STR64"...