Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 15 sur 15
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 919
    Points : 375
    Points
    375

    Par défaut Passer un tableau contraint en parametre générique de paquetage.

    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.

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 919
    Points : 375
    Points
    375

    Par défaut

    Au lieu de passer le type tableau je passe l'index_type du tableau.

  3. #3
    Membre confirmé Avatar de Blackknight
    Homme Profil pro Frédéric Praca
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric Praca
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2009
    Messages : 189
    Points : 298
    Points
    298

    Par défaut

    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 ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 919
    Points : 375
    Points
    375

    Par défaut

    Citation Envoyé par Blackknight Voir le message
    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 ?
    Je voulais passer un type de tableau contraint qui soit un sous type d'un tableau non contraint.

    J'avais regarder la page en question mais j'ai pas trouvé mon bonheur, et je comprend rien à l'english.

  5. #5
    Membre confirmé Avatar de Blackknight
    Homme Profil pro Frédéric Praca
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric Praca
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2009
    Messages : 189
    Points : 298
    Points
    298

    Par défaut

    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 :
    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

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 919
    Points : 375
    Points
    375

    Par défaut

    Citation Envoyé par Blackknight Voir le message
    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 :
    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
    Je ne connais pas la contrainte.

    Je pensais pourvoir faire

    generic
    type Tab_Contraint is new Tab_non_contraint(<>)

    Mais ça passe pas.

  7. #7
    Membre confirmé Avatar de Blackknight
    Homme Profil pro Frédéric Praca
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric Praca
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2009
    Messages : 189
    Points : 298
    Points
    298

    Par défaut

    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 ?

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 919
    Points : 375
    Points
    375

    Par défaut

    Citation Envoyé par Blackknight Voir le message
    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 ?
    Oui, j'ai une erreur à la compilation, Gnat dit que le tableau (que je passe en paramètre) doit être non contraint.

  9. #9
    Membre confirmé Avatar de Blackknight
    Homme Profil pro Frédéric Praca
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric Praca
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2009
    Messages : 189
    Points : 298
    Points
    298

    Par défaut

    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 ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 919
    Points : 375
    Points
    375

    Par défaut

    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 :
    Code ada :
    1
    2
    3
    package Q.Data is
       type sentence_type is array (value_type range <>) of note_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.

    En suite je voudrais pouvoir écrire :
    Code ada :
    1
    2
    3
    subtype Lead_Sentence is Sentence_type( lead_value_type);
    package Neural_Lead is new Q.Data.Neural (Lead_Sentence);

  11. #11
    Nouveau Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2012
    Messages : 27
    Points : 32
    Points
    32

    Par défaut

    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 :

    Code :
    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;
    permet de contraindre les tableaux à l'instanciation du package. Sinon, pour les contraindre à la déclaration :

    Code :
    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;
    Pour l'instanciation :

    Code :
    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) ;

  12. #12
    Membre éclairé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 919
    Points : 375
    Points
    375

    Par défaut

    Citation Envoyé par Sigurd9 Voir le message
    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 :

    Code :
    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;
    permet de contraindre les tableaux à l'instanciation du package. Sinon, pour les contraindre à la déclaration :

    Code :
    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;
    Pour l'instanciation :

    Code :
    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) ;
    Ben oui, mais c'est pas ce que je veux...

  13. #13
    Membre confirmé Avatar de Blackknight
    Homme Profil pro Frédéric Praca
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric Praca
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2009
    Messages : 189
    Points : 298
    Points
    298

    Par défaut

    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.
    Code :
    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;
    Comme d'habitude, un coup de gnatchop pour regénérer l'ensemble des fichiers et il n'y a plus qu'à tester.
    En gros, la notation
    Code :
    type NewTab (<>) is new Mon_Tab;
    permet de préciser que l'on veut tout type dérivé du type parent précisé.

  14. #14
    Membre éclairé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 919
    Points : 375
    Points
    375

    Par défaut

    Citation Envoyé par Blackknight Voir le message
    En gros, la notation
    Code :
    type NewTab (<>) is new Mon_Tab;
    permet de préciser que l'on veut tout type dérivé du type parent précisé.
    Merci blackknight, ça me paraissait bizarre que ce soit pas faisable aussi.
    Il me semble avoir testé un truc dans le genre pourtant.

    Je re- testerai à l'occase.
    Merci en tout cas.

  15. #15
    Membre confirmé Avatar de Blackknight
    Homme Profil pro Frédéric Praca
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric Praca
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2009
    Messages : 189
    Points : 298
    Points
    298

    Par défaut

    Bon, ceci dit, ça ne force pas l'instanciation avec un type contraint.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •