Visitor Pattern and Multiple-Dispatch Explained (in C++)