equal
deleted
inserted
replaced
|
1 #include <iostream> |
|
2 |
|
3 using namespace std; |
|
4 |
|
5 |
|
6 struct _EmptyList { |
|
7 void write() const {} |
|
8 }; |
|
9 |
|
10 template <typename _Item, typename _Next> |
|
11 struct _AddNode { |
|
12 typedef _Next Next; |
|
13 typedef _Item Item; |
|
14 |
|
15 const Item item; |
|
16 const Next& next; |
|
17 |
|
18 _AddNode(const Item& _item, const Next& _next) |
|
19 : item(_item), next(_next) {} |
|
20 |
|
21 void write() const { |
|
22 next.write(); |
|
23 cout << item << ' '; |
|
24 } |
|
25 }; |
|
26 |
|
27 template <typename _List = _EmptyList> |
|
28 struct _Writer { |
|
29 typedef _List List; |
|
30 |
|
31 const List list; |
|
32 |
|
33 _Writer(const List& _list = List()) : list(_list) {} |
|
34 |
|
35 |
|
36 template <typename Item> _Writer<_AddNode<Item, List> > add(Item item) const { |
|
37 return _Writer<_AddNode<Item, List> >(_AddNode<Item, List>(item, list)); |
|
38 } |
|
39 |
|
40 void write() const { |
|
41 list.write(); |
|
42 cout << endl; |
|
43 } |
|
44 }; |
|
45 |
|
46 |
|
47 typedef _Writer<> Writer; |
|
48 |
|
49 int main() { |
|
50 Writer().add(3).add("alpha").add(4.53).write(); |
|
51 } |