IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Array of const et const


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut Array of const et const
    Bonjour

    Dans une procédure je peux définir un paramètre de type "array of const".
    Mais si je veux définir un paramètre comme ça mais pas dans un tableau ce n'est pas possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure Toto(Valeurs: array of const); // << ok
     
    procedure Toto(Valeur: const); // << nok
    Je peux utiliser un TVarRec comme type de paramètre mais ça oblige à déclarer le TVarRec et à le remplir avant d'appeler la fonction. Du coup ça perd de son intérêt.

    Ou alors utiliser un array of const en ne mettant qu'un seul élément dans le tableau mais je trouve ça un peu stupide.

    Donc, est-ce que j'ai raté un truc dans tout ça ? Ou n'est-ce vraiment pas possible ?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    Les variables non types, pas facile

    mais je dirais plutot procedure Toto(const Valeur);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expérimenté
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 110
    Par défaut
    Bonjour
    Si tu veux n'utiliser qu'un seul paramètre, de type quelconque, vu que tous les types standards sont convertibles en variant, pourquoi pas utiliser ce type ?

    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
     
    procedure MyProc(Valeur: Variant);
    begin
       ...
    end;
     
    var i: Integer;
        c: Char;
        r: Double;
        s: String;
    begin
      MyProc(i);
      MyProc(c);
      MyProc(r);
      MyProc(s);
    end.
    solilog

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Les variables non types, pas facile

    mais je dirais plutot procedure Toto(const Valeur);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure Toto(const valeur);
    begin
      ShowMessage(TVarRec(Valeur).VType.ToString);
    end;
    ça compile mais Valeur n'est pas un TVarRec apparemment. Si j'appelle Toto('Bidule') la fonction affiche 99, ce qui ne correspond à rien.
    Je ne sais même pas comment Delphi peut renvoyer une valeur dans ce cas

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    @solilog Oui je pourrais mais tout d'abord, la question venait de la possibilité d'utiliser un tableau d'un certain type et l'impossibilité d'utiliser ce même type hors tableau.

    Ensuite, il y a une différence entre un variant et un TVarRec (array of const est identique à array of TVarRec).
    Le variant tient plus de plus de place et donc plus "lourd" à gérer.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 914
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Je ne sais même pas comment Delphi peut renvoyer une valeur dans ce cas
    Il ne peut pas et ce n'est pas le but. En général ce paramètre est suivi d'un autre donnant la taille pour agir sur une zone mémoire brute (copie par exemple).

    Par contre array of const est automatiquement traduit en array of TVarRec, le principe n'est pas le même.

    Déclare le paramètre TValue, tu auras ainsi le même comportement qu'un TVarRec.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    uses System.Rtti;
     
    procedure Toto(const Valeur :TValue);
    begin
      case valeur.Kind of
        tkInteger : ShowMessage(Valeur.AsInteger.ToString);
        tkUString : ShowMessage(Valeur.AsString);
        ...
      end;
    end;

  7. #7
    Invité
    Invité(e)
    Par défaut
    TVarRec perd son utilité avec une fonction ayant un seul paramètre car au moment de la compilation on connait le type de l'argument alors on doit écrire le code adéquate directement.

  8. #8
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Déclare le paramètre TValue, tu auras ainsi le même comportement qu'un TVarRec.
    Ah ben voilà ... C'est ce que je ne savais pas ... Je me coucherai moins bète

    Merci

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

Discussions similaires

  1. const record et array
    Par Papy214 dans le forum Langage
    Réponses: 6
    Dernier message: 04/03/2017, 15h17
  2. const C array -> C array
    Par oodini dans le forum Langage
    Réponses: 7
    Dernier message: 26/02/2015, 10h42
  3. [Types] Manipulation d'un array of const
    Par Clorish dans le forum Langage
    Réponses: 2
    Dernier message: 03/06/2005, 14h18
  4. Pb d'nitialisation d'un const char*
    Par davkick dans le forum C++
    Réponses: 9
    Dernier message: 09/12/2004, 16h27
  5. Chaines et pointeurs mais pas "const"
    Par hpfx dans le forum C
    Réponses: 9
    Dernier message: 05/10/2003, 20h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo