// ********** VisitorDemo.cpp ********** #include #include using namespace std; class Visitor; class Element { public: virtual void accept(Visitor* v) = 0; }; class ConcreteElementA : public Element { public: void accept(Visitor* v); void operationA() {} }; class ConcreteElementB : public Element { public: void accept(Visitor* v); void operationB() {} }; class Visitor { public: virtual void visit(ConcreteElementA* e) = 0; virtual void visit(ConcreteElementB* e) = 0; }; class ConcreteVisitor1 : public Visitor { public: void visit(ConcreteElementA* e) { e->operationA(); } void visit(ConcreteElementB* e) { e->operationB(); } }; class ConcreteVisitor2 : public Visitor { public: void visit(ConcreteElementA* e) { e->operationA(); } void visit(ConcreteElementB* e) { e->operationB(); } }; void ConcreteElementA::accept(Visitor* v) { v->visit(this); } void ConcreteElementB::accept(Visitor* v) { v->visit(this); } const int MAX = 100000; int main() { hrtime_t t1 = gethrtime(); for (int i=0; iaccept(v1); ea->accept(v2); eb->accept(v1); eb->accept(v2); } hrtime_t t2 = gethrtime(); cout << (t2-t1)/1000000 << " "; }