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 C++ Discussion :

[template] Attribut accessible à toute instance de la classe avec tout param template


Sujet :

Langage C++

  1. #21
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu as raison, dans le cas qui nous occupe, ce sera inliné.

    J'suis tellement habitué à ne pas (assez) faire confiance aux compilos moi

  2. #22
    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
    Bon, ben dans ce cas, je vais coder ça avec un héritage alors car je n'arrive pas vraiment à comprendre la méthode de Davidbrcz.

    néemmoins, je laisse le sujet ouvert des fois que Jean-marc Bourguet passe dessus.

  3. #23
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par méphistopheles Voir le message
    Bon, ben dans ce cas, je vais coder ça avec un héritage alors car je n'arrive pas vraiment à comprendre la méthode de Davidbrcz.

    néemmoins, je laisse le sujet ouvert des fois que Jean-marc Bourguet passe dessus.
    Bah elle marche, tu peux la considérer comme une boite noire non ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #24
    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
    Ben désolé, mais j'ai pour principe de ne coder que ce que je comprend. D'autre part, je ne sait pas avec quelle version de gcc la chose sera compilée et le fait que ça ne compile pas sour VC++ est éloquent quand à la possibilité d'erreur par-ce qu'on considère la chose comme une boite noire.
    Enfin, je suis un incorrigible curieux et j'ai vraiment envie de savoir comment ça fonctionne .

    Accessoirement , je trouve la méthode de l'héritage plus "propre" et surtout plus économique en clavier (je n'ai même pas à recoder mes fonctions ).

  5. #25
    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 Matthieu Brucher Voir le message
    Si c'est inlinable, le compilateur se débrouille pour que ça n'ait aucun surcoût.

    Et un constructeur vide, c'est un surcoût nul si c'est inlinable.
    Je viens d'y penser, mais peut-être faut-il aussi surcharger l'opérateur= et avec un opérateur inline et vide (les opérations sont faites à partir d'angle) afin d'éviter que le compilo en crée par défaut non ?

    Et si oui, sur charger un seul constructeur empêche le compilo de tous les créer (en général il cré le défaut et le par copie) ou bien faut-il surcharger les deux, ( même question pour operator= ).

    Merci

  6. #26
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Si un des 4 suivants : contructeur, destructeur, constructeur de recopie ou operator= n'est pas défini et que le compilateur en a besoin, alors il va en synthétiser un par défaut.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  7. #27
    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
    oui, mais si l'un est défini (par exemple angle()) et qu'il a besoin d'un autre (par exemple angle(angle)), que fait-il ?

  8. #28
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Bah il le synthétise, il n'y a aucun rapport entre eux.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  9. #29
    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
    donc pour éviter un surcoût, je dois redéfinir tout les constructeurs, destructeurs et operateurs= ?

  10. #30
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par méphistopheles Voir le message
    donc pour éviter un surcoût, je dois redéfinir tout les constructeurs, destructeurs et operateurs= ?
    Non, s'il les construit par défaut, il pourra aussi les inliner.

  11. #31
    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
    oui, mais s'il les construit par défaut, il risque de mettre des chose dedans non ? or je préférerais que ceux-cis soient vide (je fait tout à partir de la classe angle)
    ...

  12. #32
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Il ne met que les copies des objets contenus, ce que tu feras tout de même (sauf exception). Même si tu ne le fais, tu fais une initialisation, donc tu as tout de même une copie. Et dans tous les cas, c'est inlinable, donc tout bénèf.

  13. #33
    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
    oui, mais étant donné que je le fait déjà (agl n'est pas exactement recopié mais transformé d'un angle à l'autre), je ne voudrais pas que ça soit fait deux fois !

  14. #34
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    * template est necessaire pour le meme genre de raison que typename
    * sur les aspects techniques, "ma" solution n'est pas reellement la mienne. David l'a modifiee pour la faire compiler avec g++ 4.3; a premiere vue je ne comprends pas pourquoi ces modifs sont necessaires et je n'ai pas eu le temps de regarder en details. Vu que des compilateurs differents (j'en ai essaye d'autres que g++) ont des opinions differentes sur ce code, il faut soit connaitre les regles mieux que moi sur le bout des doigts, soit replonger dans les textes.
    * d'un point de vue conception, j'ai pas trop regarde mais j'ai du mal a voir ton objectif. Tu as une classe qui visiblement a une semantique de valeur, mais a un membre protected, inobservable et que tu essaies de copier. Sans une meilleure comprehension, c'est difficile de te conseiller une voie d'approche. A la premiere lecture ma reaction a ete que je mettrais agl dans une classe de base.

  15. #35
    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 Jean-Marc.Bourguet Voir le message
    * template est necessaire pour le meme genre de raison que typename
    Ha, je savais ça pour les typename, mais j'ignorais que ça vouvais être utilisé pour indiquer la présence d'un template.(si j'ai bien compris ton annalogie, mais je ne suis pas sûr).
    Par contre, dans le cas du code de david, je ne cois pas vraiment l'interet de l'indiquer puisque friend est déjà précédé d'un template<N>. En fait une traduction "en français" de la ligne m'aiderait.

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    * sur les aspects techniques, "ma" solution n'est pas reellement la mienne. David l'a modifiee pour la faire compiler avec g++ 4.3; a premiere vue je ne comprends pas pourquoi ces modifs sont necessaires et je n'ai pas eu le temps de regarder en details. Vu que des compilateurs differents (j'en ai essaye d'autres que g++) ont des opinions differentes sur ce code, il faut soit connaitre les regles mieux que moi sur le bout des doigts, soit replonger dans les textes.
    A vrai dire, plus que le détail, c'est le concept qui m'échappe. et comme david n'a pas pu répondre à mes questions, je me suis adressé au créateur. Sinon, je suis preneur du code original.

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    * d'un point de vue conception, j'ai pas trop regarde mais j'ai du mal a voir ton objectif. Tu as une classe qui visiblement a une semantique de valeur, mais a un membre protected, inobservable et que tu essaies de copier. Sans une meilleure comprehension, c'est difficile de te conseiller une voie d'approche. A la premiere lecture ma reaction a ete que je mettrais agl dans une classe de base.
    C'est ce que j'ai commencé à faire, mais cela ne m'empêche pas de vouloir comprendre le code posté par david

    Cordialement

  16. #36
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    J'ai l'impression que j'ai loupé un truc, mais je ne comprends pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template<int> friend class angle;
    ne suffit pas à résoudre ton problème ?

  17. #37
    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 white_tentacle Voir le message
    J'ai l'impression que j'ai loupé un truc, mais je ne comprends pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template<int> friend class angle;
    ne suffit pas à résoudre ton problème ?
    heu, tu veux dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template<int T> friend class angle<T>;
    ?

    à vrai dire, je ne connais pas vraiment la manipulation des template avec les friends...

  18. #38
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Non, je veux bien dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template<int> friend class angle;
    Chez moi ça fonctionne, ton compilo râle ?

  19. #39
    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
    avec cette déclaration, le friend est valide pour n'importe quel angle template ?

    aurais-tu un cours traitant ce point, je souhaiterais approfondir .


    Merci

    Citation Envoyé par Davidbrcz Voir le message
    Si un des 4 suivants : contructeur, destructeur, constructeur de recopie ou operator= n'est pas défini et que le compilateur en a besoin, alors il va en synthétiser un par défaut.
    Par contre c'est curieux, il exige que le constructeur de copie soit un angle_base & au lieu d'un angle_base ... n'y a t'il pas risque que ce paramètre soit transmis ?

  20. #40
    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
    ? le paramètre d'un constructeur de copie doit toujours être passé par référence constante. donc c'est plutôt normal

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/03/2015, 16h34
  2. Réponses: 32
    Dernier message: 28/11/2010, 17h33
  3. Instance d'une classe avec une string
    Par beetlejuice722 dans le forum C#
    Réponses: 30
    Dernier message: 31/10/2008, 10h43
  4. Envoyer un message a toutes instances d'une class
    Par toure32 dans le forum Delphi
    Réponses: 2
    Dernier message: 18/11/2006, 20h06
  5. Réponses: 2
    Dernier message: 07/07/2006, 19h59

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