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