Articles of visiteur

Quelle est la meilleure façon de mettre en œuvre AST en utilisant un modèle de visiteur avec une valeur de retour?

J’essaie d’implémenter un simple arbre de syntaxe abstraite (AST) en C ++ en utilisant le modèle de visiteur. Généralement, un modèle de visiteur ne gère pas la valeur de retour. Mais dans mon AST, il existe des nœuds d’expressions qui se soucient du type de retour et de la valeur de son nœud fils. Par […]

Boost Graph Library and Visitors

J’écris une bibliothèque pour manipuler les graphes de liaison et j’utilise la Boost Graph Library pour stocker les données pour moi. Malheureusement, je n’arrive pas à comprendre comment mettre en œuvre un modèle de visiteur approprié, car vous ne pouvez pas sous-classer les vertices. Vous devez plutôt vous fier aux propriétés. La structure de visiteurs […]

Implémentation du modèle de visiteur tout en autorisant différents types de fonctions de retour

J’essaie d’implémenter le modèle de visiteur pour une structure d’object comportant des méthodes avec différents types de retour (chaîne, int signé, int non signé, etc.) Maintenant, dans la hiérarchie des objects, j’ai ajouté une méthode Accept avec la signature suivante (en utilisant C ++): void Accept(Visitor *); Je ne parviens pas à comprendre comment utiliser […]

Optimiser une comparaison sur des éléments de tableau avec deux conditions; Mécanismes d’abstraction C ++?

Ma question est un suivi de Comment rendre ce code plus rapide (apprendre les meilleures pratiques)? , qui a été mis en attente (bummer). Le problème consiste à optimiser une boucle sur un tableau avec des flotteurs testés pour déterminer s’ils se trouvent dans un intervalle donné. Les indices des éléments correspondants dans le tableau […]

Hiérarchie itérative des nœuds – Visiteur et composite?

Imaginons que j’ai une collection de noeuds que j’utilise plus tard pour ma classe Renderer. Ensuite, j’ai une classe de visiteur qui peut visiter un noeud ou une collection entière. C’est simple parce que ma collection de nœuds est simplement un wrapper pour std :: list avec quelques méthodes supplémentaires. Le problème est que j’aimerais […]

Méthodes virtuelles visiteurs et basées sur des modèles

Dans une implémentation typique du modèle de visiteur , la classe doit prendre en compte toutes les variations (descendants) de la classe de base. Il existe de nombreux cas où le même contenu de méthode chez le visiteur est appliqué aux différentes méthodes. Une méthode virtuelle basée sur un modèle serait idéale dans ce cas, […]

Quand faut-il vraiment utiliser le modèle de visiteur

Ok avant de marquer ceci comme un duplicata, laissez-moi me préciser. Je lis sur le modèle de visiteur et ses utilisations applicables. Je suis tombé sur ce post: Quand devrais-je utiliser le modèle de conception de visiteur? et l’utilisateur qui a écrit la première réponse dit ce qui suit: Nous souhaitons maintenant append une nouvelle […]

Pourquoi ne puis-je pas visiter ce type personnalisé avec boost :: variante?

Le code suivant: #include #include #include struct A { A() { } ~A() throw() { } A& operator=(A const & rhs) { return *this; } bool operator==(A const & rhs) { return true; } bool operator<(A const & rhs) { return false; } }; std::ostream & operator<<(std::ostream & os, A const & rhs) { os […]

Modèle C ++ pour couvrir les méthodes const et non-const

J’ai un problème avec la duplication de code identique pour les versions const et non const . Je peux illustrer le problème avec du code. Voici deux exemples de visiteurs, l’un modifie les objects visités et l’autre non. struct VisitorRead { template void operator()(T &t) { std::cin >> t; } }; struct VisitorWrite { template […]

Profil de visiteur de QVariant (sans test de type manuel ni transtypage)

La classe QVariant de Qt a-t-elle une implémentation de modèle de visiteur existante (et pratique)? Sinon, est-il possible d’obtenir quelque chose de similaire à boost::apply_visitor() , c’est-à-dire de minimiser la duplication en ce qui concerne le test du type et du transtypage? Je veux réaliser quelque chose dans le sens suivant: /* I have a […]