Bonjour.
Je souhaite donner à un paquet générique un type tableau contraint.
Comment le spécifier s'il vous plaît. Si c'est possible néanmoins.
Merci.
Bonjour.
Je souhaite donner à un paquet générique un type tableau contraint.
Comment le spécifier s'il vous plaît. Si c'est possible néanmoins.
Merci.
Au lieu de passer le type tableau je passe l'index_type du tableau.
Je pense que je n'ai pas dû bien comprendre la question parce que sinon, la réponse se trouve dans l'ARM dans l'exemple ligne 19 de cette page.
Pourrais-tu préciser ?
Et bien dans ce cas, qu'est-ce qui t'empêche de faire une variation de l'exemple de l'ARM, du style
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 generic type Item is private; -- formal type type Index is (<>); -- formal type type Row is new mon_Tab(1..35); -- avec mon_Tab non contraint with function "<"(X, Y : Item) return Boolean; -- formal subprogram
Et ça ne marche pas ?
Parce que l'exemple de l'ARM que je t'ai fourni utilise bien des tableaux non contraints.
D'ailleurs, qu'est-ce qui ne marche pas ? Tu as un message d'erreur à la compilation ?
Pourrais-tu nous fournir un petit code qui illustre ton problème ?
As-tu un problème dans la déclaration du générique ou à son instanciation ?
Bon, je dois tout ré-ecrire puisque j'ai fait autrement (bien que ça ne m'aille pas).
Bref.
D'abord j'ai un paquet Q.Data dans lequel je déclare un type sentence_type :
En suite je veux passer en paramètre à un paquet appelé Q.Data.Neural un type tableau contraint sous type de sentence_type. Que je ne sais pas déclarer.
Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 package Q.Data is type sentence_type is array (value_type range <>) of note_type;
En suite je voudrais pouvoir écrire :
Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 subtype Lead_Sentence is Sentence_type( lead_value_type); package Neural_Lead is new Q.Data.Neural (Lead_Sentence);
Un tableau doit être indexé par un type discret. Le type générique utilisé pour l'indexation doit être défini à l'aide du diamant :
permet de contraindre les tableaux à l'instanciation du package. Sinon, pour les contraindre à la déclaration :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 package Q.Data is generic type note_type is private ; type value_type is <> ; --indique que value_type est de type discret type sentence_type is array (value_type) of note_type;
Pour l'instanciation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 package Q.Data is generic type note_type is private ; type value_type is <> ; --indique que value_type est de type discret type sentence_type is array (value_type range <>) of note_type;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 type T_valeurs is ... type T_indices is integer range 1..10 ; type T_Tableau is array(T_indices) of T_Valeurs ; package P_Pack is new Q.Data(T_Valeurs, T_indices, T_Tableau) ;
Alors j'ai fini par trouver grâce à la page suivante de quoi faire un bout de code qui me semble répondre au problème.
Comme d'habitude, un coup de gnatchop pour regénérer l'ensemble des fichiers et il n'y a plus qu'à tester.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 package Types is -- Déclaration d'un type Tableau non contraint type Mon_Tab is array(Positive range <>) of Integer; end Types; package body Le_Gen is function Length(Tab : NewTab) return Natural is begin return Tab'Length; end Length; end Le_Gen; with Types; use Types; generic type NewTab (<>) is new Mon_Tab; package Le_Gen is function Length(Tab : NewTab) return Natural; end Le_Gen; with Ada.Text_Io; use Ada.Text_Io; with Types; use Types; with Le_Gen; procedure Test_Gen is -- intanciation du nouveau type de tableau type My_New_Tab is new Mon_Tab(1..25); -- intanciation du générique package My_Gen is new Le_Gen(My_New_Tab); Toto : My_New_Tab := (others => 12); begin Put_Line("Longueur : " & Natural'Image(My_Gen.Length(Toto))); end Test_Gen;
En gros, la notationpermet de préciser que l'on veut tout type dérivé du type parent précisé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part type NewTab (<>) is new Mon_Tab;
Bon, ceci dit, ça ne force pas l'instanciation avec un type contraint.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager