00 //===================================================================
01 // Name        : main.cpp
02 // Author      : Simonas Saltenis
03 // Version     :
04 // Description : Demonstrates the visitor pattern: different shapes visited by different visitors
05 //===================================================================
06 
07 #include <iostream>
08 #include <vector>
09 #include "visitors.h"
10 
11 int main()
12 {
13     Circle                  c{1};
14     Rectangle               r{2,3};
15     AreaCalculator          ac;
16     CircumferenceCalculator cc;
17     std::vector<std::pair<Shape*, Visitor*>>  sv {{&c, &ac}, {&c, &cc},{&r, &ac}, {&r, &cc}};
18 
19     for (auto [shape, visitor] : sv)
20         shape->accept(*visitor);  // Double-dispatch magic
21 }
22