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

Visual C++ Discussion :

parametre de CList<TYPE,ARG_TYPE>


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Par défaut parametre de CList<TYPE,ARG_TYPE>
    Salut
    pour ce qui est de la classe CList pour ne prendre que celle-ci

    la MSDN dit
    TYPE
    Type of object stored in the list.
    ARG_TYPE
    Type used to reference objects stored in the list. Can be a reference
    .

    a quoi peut bien service ARG_TYPE ???

    merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Le ARG_TYPE, en règle générale, sert à spécifier comment les objets ou littéraux doivent être utilisés. Cela vaut pour les CList comme pour les autres template.
    Si on prend un exemple, tu crées un template TOTO sans ARG_TYPE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template <class TYPE>
    class TOTO
    {
    public :
        explicit TOTO(){};
        virtual ~TOTO(){};
        void Set (TYPE t){m_obj = t;};
        TYPE Get (){return m_obj};
    private :
        TYPE m_obj;
    };
    Ensuite, si tu déclares un TOTO de CString :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            TOTO<CString> montotodestring;
            CString machaine = TEXT("coin");
            montotodestring.Set (machaine);
            CString val;
            val = montotodestring.Get ();
    C'est très moyen car lors du Set (), le prog sera obligé de faire appel au constructeur de recopie car nous n'avons pas de référence à machaine.

    Alors, on aurait pu faire la classe TOTO comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template <class TYPE>
    class TOTO
    {
    public :
        explicit TOTO(){};
        virtual ~TOTO(){};
        void Set (TYPE& t){m_obj = t;};
        TYPE& Get (){return m_obj};
    private :
        TYPE m_obj;
    };
    On travaillerait avec des références d'objet, ce qui est quand-même beaucoup plus optimal et moins dévoreur d'espace mémoire.
    Par contre, si tu souhaites ensuite travailler avec un TOTO<int>, renvoyer une référence d'un int (ou bool, ou long ou ...), ça fait un peu lourd et là on a donc l'effet inverse : travailler avec des références de littéraux est beaucoup plus couteux que de travailler avec des littéraux eux-même.

    On trouve donc en général dans les templatele ARG_TYPE qui permet de spécifier à celui qui l'utilise q'il veut travailler avec des références, des références constantes ou avec le type lui-même.

    Si on revient dans l'exemple du CList, mieux vaut faire un CList<CString, CString&> ; par contre, mieux vaut avoir un CList<bool, bool>

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/07/2011, 13h04
  2. [COM] Definir un parametre de fonction de type char
    Par kacedda dans le forum Visual C++
    Réponses: 13
    Dernier message: 16/04/2008, 13h10
  3. recuperer le type du parametre (void*)
    Par kacedda dans le forum C
    Réponses: 15
    Dernier message: 01/02/2006, 09h44
  4. Type complexe en parametre dans une procedure stockée
    Par Tsimplice dans le forum Oracle
    Réponses: 2
    Dernier message: 06/10/2005, 02h42
  5. Réponses: 9
    Dernier message: 22/07/2005, 16h10

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