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

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 [template] Attribut accessible à toute instance de la classe avec tout param template
    Bonsoir.

    j'ai récemment créé une classe angle comme celle ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template<int cycle>class angle
    {
        protected:
        int agl;
     
        public:
        angle(int a=0);
     
        template<int acycle>
        angle(angle<acycle> a);
     
        ...
     }
    Vous remarquerez le constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template<int acycle>
        angle(angle<acycle> a);
    Celui ci permet de recopier n'importe quel autre type d'angle.

    Le problème est que quand je veut définir ce constructeur, je me heurte à un mur: comment accéder à l'attribut a.agl puisque a est considéré comme une autre classe et que agl n'est du coup plus accessible... ?


    Merci pour votre aide.

    Cordialement

  2. #2
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonsoir,
    Je vois 3 solutions:
    - Passer par un accesseur. Mais je suppose que c'est se que tu veux éviter.
    - Déclarer cette class friend avec toutes les valeurs de acycle possible. (si il y en as peu, pourquoi pas)
    - Hériter d'une class de base qui contient agl en protected.

  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 Nogane Voir le message
    Bonsoir,
    Je vois 3 solutions:
    - Passer par un accesseur. Mais je suppose que c'est se que tu veux éviter.
    oui, je ne l'utiliserais qu'en dernier recours.

    Citation Envoyé par Nogane Voir le message
    - Déclarer cette class friend avec toutes les valeurs de acycle possible. (si il y en as peu, pourquoi pas)
    Ce n'est pas moi qui vais utiliser cette classe donc ça parais une mauvaise idée...


    Citation Envoyé par Nogane Voir le message
    - Hériter d'une class de base qui contient agl en protected.
    tu veut dire créer une nouvelle classe qui hérite d'angle<acycle> ?

    mais dans ce cas, cette classe doit elle même avoir un accesseur public, ce qui ne fait que reporter le premier problème... ou bien elle doit avoir déclarer la classe appelante en friend ce qui revient au second problème ...

    L'idéal serait d'avoir un équivalent du static au niveau template....


    merci

  4. #4
    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
    question subsidiaire:

    Dans le cas ou je devrais utiliser un accesseur, il serait de toutes façon inline, mais serait il plus performant comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    inline int accesseur()const
    {
        return agl;
    }
    ou comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    inline & int accesseur()const
    {
        return agl;
    }
    merci

  5. #5
    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
    c'est un int, donc le passage par référence est plus lourd que celui par copie.
    "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)

  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
    eclesia m'a aidé (sur le chat) à trouver cette solution:
    On crée la méthode convert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template<int acycle>
        inline angle<acycle> convert()const;
    que l'on appelle comme cec ipour avoir l'angle:Le défaut est que c'est un peu crade (ça crée une méthode public en plus pour ça) mais surtout que ça crée un angle transitoire (qui doit être équivalent à un int) donc ça fait perdre du temps...

    bref: j'espere toujours mon static template...

    merci

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

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