Si tu ne veux pas montrer ton membre dans l'espace public, il suffit d'encapsuler l'appel à Visitor::visit dans une fonction qui renvoie la valeur du membre. Au passage, cela permet de donner un vrai nom à la fonction au lieu de visit.
visit n'est jamais appelé directement de l'extérieur (il l'est uniquement dans les fonctions accept), c'est bien accept qui est appelé mais soit, on peut reprendre ton argument et l'adapter à accept. C'est juste une question de style et de simplicité et de choix.
L'implémentation classique du modèle n'est d'ailleurs pas ce que tu donnes: dans Base la méthode accept est virtuelle et abstraite et implémentée dans les classes concrètes Derived1, Derived2. Dans ce cas Visitor::visit(Base& b) est b.accept(*this).
Alors ça, ça dépend de ce qu'est Base et de ce qu'est Derived1 et Derived2. Et si on applique le petit plus que j'évoque (appeler le visiteur de la classe mère), tu auras un accept pour Base.
[^] # Re: Polymorphisme
Posté par rewind (Mastodon) . En réponse au journal Visiteurs en C++. Évalué à 3.
visitn'est jamais appelé directement de l'extérieur (il l'est uniquement dans les fonctionsaccept), c'est bienacceptqui est appelé mais soit, on peut reprendre ton argument et l'adapter àaccept. C'est juste une question de style et de simplicité et de choix.Alors ça, ça dépend de ce qu'est
Baseet de ce qu'estDerived1etDerived2. Et si on applique le petit plus que j'évoque (appeler le visiteur de la classe mère), tu auras unacceptpour Base.