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

Contribuez C++ Discussion :

[FAQ C++ ?] Passage d'un pointeur en parapètre template


Sujet :

Contribuez C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut [FAQ C++ ?] Passage d'un pointeur en paramètre template
    Bonjour.

    Récemment, en essayant de faire une classe encapsulante un peu particulière de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <class T>
    class OverClass : public T
    {
      //[...]
    };
    , je me suis aperçu que ça ne marchait pas avec les pointeurs. c'est apparemment un comportement connu, mais j'ai trouvé très peu de documentation à ce sujet (bon, je ne suis pas non plus doué en recherche). De même la spécialisation pour un pointeur de type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <class T>
    class OverClass<T*>
    n'a pour moi rien d'évident et me semble être un comportement particulier du système de template.

    S'il est vrai que ces problèmes de types de données templates vont probablement disparaitre avec l'arrivée de types_trait (et is_pointer) et c++0x, je me demandais s'il n'aurait pas été pertinent d'avoir un article dans la FAQ à ce propos.

    Je pourrais éventuellement le faire, mais je ne suis pas sûr de correctement appréhender ce concept donc j'aurais aimé avoir votre avis à ce sujet et sur les fondamentaux de cette règle auparavant.

    Cordialement

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Tu pourrais détailler les comportement que te dérange ? Quelque chose doit m'échapper, puisque je n'y vois que des comportements normaux prévus par la norme.

  3. #3
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par Flob90 Voir le message
    Tu pourrais détailler les comportement que te dérange ? Quelque chose doit m'échapper, puisque je n'y vois que des comportements normaux prévus par la norme.
    Je ne dis pas que le comportement est anormal, mais qu'il ne suit pas celui "générique" car pour moi, A* est un type au même titre que A ou void . Mais dans le cas du pointeur, il y a un comportement particulier qui interdit d'en hériter... et pourtant, on peu tres bien imaginer hériter d'un itérateur qui est à peu près la même chose. Pour le reste, ce qui me trouble, c'est que dans le mécanisme de la spécialisation, si j'ai par exemple un pointeur sur un itérateu: ai-je le droit de spécialiser mon objet avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <class T> 
    class maclass<T**>
    ?

    bref, le coté "exceptionel" du pointeur a tendence à me faire voir ça comme un cas particulier

  4. #4
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    C'est une spécialisation partielle, jvois pas ce qu'il y'a de gênant là...

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    La deuxième est une spécialisation partielle comme le dit Goten, c'est pas inhabituelle comme écriture. (Alp en utilise beaucoup dans un de ces articles, orienté méta-prog je crois)

    Le premier c'est normal et spécifié dans la norme, la classe de base doit être un class-name, et * ou & ne peuvent faire partie d'un class-name. (même combat pour const et volatile)

  6. #6
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par Flob90 Voir le message
    et * ou & ne peuvent faire partie d'un class-name. (même combat pour const et volatile)
    C'est justement pour cette "précision" que je m'étonne: à quoi est-ce dû ? existe-il une justification de cette exclusion ? comment est-ce précisé (je dois avouer que j'aimerais avoir une doc de type "référence" reproduisant la norme, mais en organisé (les drafts, ça va bien quans on les lit au fur et à mesure, mais pour trouver un truc dedans ...)

Discussions similaires

  1. [Wincc flexible] Passage d'un pointeur a une fonction Vbs
    Par ren973 dans le forum Automation
    Réponses: 34
    Dernier message: 10/04/2008, 18h29
  2. Réponses: 31
    Dernier message: 31/03/2008, 14h58
  3. Réponses: 12
    Dernier message: 17/07/2007, 08h29
  4. Réponses: 7
    Dernier message: 02/12/2005, 13h02
  5. Réponses: 5
    Dernier message: 21/11/2005, 01h40

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