1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| #include <functional> #include <iostream>
class A; typedef std::function<A&(A&)> Decorator;
class A { public: A(); friend A& Plus(A&); friend A& Divide(A&); friend A& Multiply(A&); A& Minus(A& a); void Print();
private: std::string myStr; };
A::A() : myStr("这是一个例子文本") { }
A& A::Minus(A& a) { a.myStr += "-"; return a; }
void A::Print() { std::cout << myStr << std::endl; }
A& Plus(A& a) { a.myStr += "+"; return a; }
A& Divide(A& a) { a.myStr += "/"; return a; }
A& Multiply(A& a) { a.myStr += "*"; return a; }
A& operator|(A&, const Decorator&);
A& operator|(A& classA, const Decorator& decorator) { return decorator(classA); }
int main() { A a; a | Plus | Divide | Multiply; a.Minus(a).Minus(a).Minus(a); a.Print(); return 0; }
|