Compile-time Visitor
In this section, we will analyze the possibility of using the Visitor pattern at compile time, in a similar fashion to, say, the application of the Strategy pattern that leads to policy-based design.
First of all, the multiple dispatch aspect of the Visitor pattern becomes trivial when used in the template context:
template <typename T1, typename T2> auto f(T1 t1, T2 t2);
A template function can easily run a different algorithm for any combination of the T1
and T2
types. Unlike the run-time polymorphism implemented with virtual functions, dispatching the call differently based on two or more types comes at no extra cost (other than writing code for all the combinations we need to handle, of course). Based on this observation, we can easily mimic the classic Visitor pattern at compile time:
// Example 18 class Pet { std::string color_; public: Pet(std::string_view color) : color_(color) {} const std...