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 :

Desing pattern du visiteur


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Par défaut Desing pattern du visiteur
    Bonjour,

    J'essaye d'implémenter le design pattern du visiteur pour ne pas utiliser les dynamic_cast. mais problème je ne sais pas comment le rendre encore plus flexible avec des template comme sur l'article wikipedia en anglais.

    si quelqu'un peut m'apporter un élément de réponse merci beaucoup

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par victor_gasgas Voir le message
    Bonjour,

    J'essaye d'implémenter le design pattern du visiteur pour ne pas utiliser les dynamic_cast. mais problème je ne sais pas comment le rendre encore plus flexible avec des template comme sur l'article wikipedia en anglais.

    si quelqu'un peut m'apporter un élément de réponse merci beaucoup
    Un visiteur acyclique ne peut être implémenté qu'avec dynamic_cast. Dans l'exemple Wikipedia, le dynamic_cast est remplacé par une recherche dans une table de visiteurs. Au niveau performance, on va peut-être y gagner un peu (et encore). Au niveau de la "vérifiablitité" et de la lisibilité du code, on y perds énormément. Il impose de plus que les éléments visitables deviennent des templates, ce qui n'est pas forcément une possibilité, et peut être même contre-productif.

    J'ai assez tapé sur la tête de dynamic_cast ces derniers jours, tout en soutenant qu'il y avait certaines utilisation légitimes de ce mot-clef. L'implémentation d'un visiteur acyclique est est une, et pour une bonne raison : à partir du moment ou j'évalue ma fonction visit, je sais que je ne vais m'intéresser qu'aux visiteurs pour lequel j'ai un intérêt. Je peux donc réduire mon choix à un type particulier de visiteur.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    class visitor
    {
    public:
      visitor() { }
      virtual ~vistor() { }
    };
     
    class element_vistor : public visitor
    {
    public:
      element_visitor() { }
      virtual ~element_visitor() { }
     
      void accept(element *e) { ... }
    };
     
     
    class element
    {
    public:
      void visit(visitor* v)
      {
        element_visitor* ev = dynamic_cast<element_visitor*>(v);
        // si ce n'est pas un visiteur d'élément, je ne vais de toute façon
        // pas essayer de me faire "accepter".
        if (ev)
        {
           ev->accept(this);
        }
      }
    };
    J'en ai parlé sur mon blog il y a quelques années.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Par défaut
    Merci c'est que j'avais toujours lu que dynamic_cast était du à un problème de conception.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par victor_gasgas Voir le message
    Merci c'est que j'avais toujours lu que dynamic_cast était du à un problème de conception.
    C'est le cas, 99% du temps. Mais il arrive que, dans certains cas, ce soit une solution simple, efficace et correcte à un problème donné. Ces cas sont rares - très rares même - mais le visiteur acyclique en est un.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Précisions sur Desing Pattern MVC
    Par totojava dans le forum Débuter
    Réponses: 12
    Dernier message: 28/04/2011, 19h36
  2. [débutante] Pattern visiteur
    Par ghani56 dans le forum Langage
    Réponses: 6
    Dernier message: 09/09/2009, 14h57
  3. [Visiteur] design pattern visiteur
    Par wsdl_adr dans le forum Design Patterns
    Réponses: 1
    Dernier message: 07/10/2008, 20h41
  4. [Visiteur] comment utiliser le design pattern de visiteur pour créer un compilateur
    Par katimm dans le forum Design Patterns
    Réponses: 12
    Dernier message: 18/09/2008, 10h22
  5. [Visiteur] design pattern Visiteur ou Iterateur pour parcourir une arborescence?
    Par Invité dans le forum Design Patterns
    Réponses: 1
    Dernier message: 29/05/2008, 17h10

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