title: Visitor Pattern Explanation
body: <p>So I've read up all the documentation about the Visitor pattern, and I'm still mightily confused. I've taken this example from another SO question, could someone help me understand? For instance when do we use a visitor design pattern? I think I may have understood some of it, but I'm just not able to see the bigger picture. How do I know when I can use it?</p>
  
  <pre><code>class equipmentVisited
  {
    virtual void accept(equipmentVisitor* visitor) = 0;
  }
  
  class floppyDisk : public equipmentVisited
  {
    virtual void accept(equipmentVisitor* visitor);
  }
  
  class processor : public equipmentVisited
  {
    virtual void accept(equipmentVisitor* visitor);
  }
  
  class computer : public equipmentVisited
  {
    virtual void accept(equipmentVisitor* visitor);
  }
  
  class equipmentVisitor
  {
    virtual void visitFloppyDisk(floppyDisk* );
    virtual void visitProcessor(processor* );
    virtual void visitComputer(computer* );
  }
  
  // Some additional classes inheriting from equipmentVisitor would be here
  
  equipmentVisited* visited;
  equipmentVisitor* visitor;
  
  // Here you initialise visited and visitor in any convenient way
  
  visited-&gt;accept(visitor);
  </code></pre>