libart-paperback 0.1.0-a.1.20260122225059.e5fea306241a
PDF (1.4) library for C++
visitor.hxx
1#ifndef libart_paperback__visitor_hxx_
2#define libart_paperback__visitor_hxx_
3
4namespace Art::Paperback
5{
6
7 /// Virtual base class for visitors.
8 ///
9 class Visitor
10 {
11 protected:
12 Visitor() = default;
13
14 virtual
15 ~Visitor() noexcept = default;
16
17 };
18
19 /// Base class for visitors of type T.
20 ///
21 template<typename T>
23 {
24 public:
25 /// Visit.
26 ///
27 /// \param visitee The visitee.
28 ///
29 virtual
30 void
31 visit(T& visitee)
32 {
33 visit(const_cast<T const&>(visitee));
34 }
35
36 /// Visit.
37 ///
38 /// \param visitee The visitee.
39 ///
40 virtual
41 void
42 visit(T const& visitee) = 0;
43
44 protected:
45 /// Constructor.
46 ///
47 Basic_visitor() = default;
48
49 /// Destructor.
50 ///
51 virtual
52 ~Basic_visitor() noexcept = default;
53
54 };
55
56 /// Accept visitor on visitee.
57 ///
58 /// \param visitee The visitee.
59 /// \param v The visitor.
60 ///
61 template<typename T>
62 void
63 accept(T const& visitee, Visitor& v)
64 {
65 auto& v_cast = dynamic_cast<Basic_visitor<T>&>(v);
66 v_cast.visit(visitee);
67 }
68
69} // namespace Art::Paperback
70
71#endif
Base class for visitors of type T.
Definition visitor.hxx:23
Basic_visitor()=default
Constructor.
virtual ~Basic_visitor() noexcept=default
Destructor.
virtual void visit(T &visitee)
Visit.
Definition visitor.hxx:31
virtual void visit(T const &visitee)=0
Visit.
Virtual base class for visitors.
Definition visitor.hxx:10
Primary paperback namespace.
Definition array.cxx:6
void accept(T const &visitee, Visitor &v)
Accept visitor on visitee.
Definition visitor.hxx:63