Visitor mode example (using the Loki class library)

xiaoxiao2021-03-06  44

#include

Using namespace std;

Class Element;

Class Elementa;

Class ElementB;

#define us_loki

#ifndef USE_LOKI

// Abstract Visitor

Class visitor {

PUBLIC:

Virtual Void VisiteLementa (Elementa &) = 0;

Virtual Void VisiteLementB (ElementB &) = 0;

}

// Concrete Visitors

Class Visitor1: Public visitor {

PUBLIC:

Virtual Void VisiteLementa (Elementa & Pa) {cout << "Visitor1 :: VisiteLementa << Endl;}

Virtual Void VisiteLementB (ElementB & Pb) {cout << "Visitor1 :: VisiteLementB << endl;}

}

Class Visitor2: Public Visitor {

PUBLIC:

Virtual Void VisiteLementa (Elementa & Pa) {cout << "Visitor2 :: VisiteLementa << Endl;}

Virtual Void VisiteLementB (ElementB & Pb) {COUT << "Visitor2 :: VisiteLementB << Endl;}

}

// Abstract Element

Class element {

PUBLIC:

Virtual Void Accept (Visitor &) = 0;

}

// Concrete Elements a and b

Class Elementa: Public element {

PUBLIC:

Virtual Void Accept (V.VisItem "(* this);

}

Class ElementB: Public element {

PUBLIC:

Virtual Void Accept (V.visiteLewB (* this);

}

#ELSE

#include "visitor.h"

Using namespace loki;

// Abstract Visitor

Typedef Cyclicvisitor Myvisitor;

// Concrete Visitors

Class Visitor1: Public Myvisitor {

PUBLIC:

Virtual Void Visit (Element &) {}

Virtual Void Visit (Elementa & Pa) {cout << "Visitor1 :: VisiteLementa << Endl;}

Virtual Void Visit (ElementB & Pb) {cout << "Visitor1 :: VisiteLewB" << endl;}

}

Class Visitor2: public myvisitor {

PUBLIC:

Virtual Void Visit (Element &) {} Virtual Void Visit (Elementa & Pa) {COUT << "Visitor2 :: VisiteLementa << Endl;

Virtual Void ViID Visit (ElementB & Pb) {cout << "Visitor2 :: VisiteLementB << Endl;}

}

// Abstract Element

Class element {

PUBLIC:

Virtual Void Accept (Myvisitor &) = 0;

}

// Concrete Elements a and b

Class Elementa: Public element {

PUBLIC:

Define_cyclic_visitable (myvisitor);

}

Class ElementB: Public element {

PUBLIC:

Define_cyclic_visitable (myvisitor);

}

#ENDIF

int main ()

{

Visitor1 V1; // Algorithm 1

Visitor2 V2; // Algorithm 2

Elementa E1; // Object 1

ELEMENTB E2; // Object 2

E1.Accept (v1); // Object 1 algorithm 1

E1.Accept (v2); // Object 1 algorithm 2

E2.Accept (v1); // Object 2 algorithm 1

E2.Accept (v2); // Object 2 algorithm 2

}

转载请注明原文地址:https://www.9cbs.com/read-80642.html

New Post(0)