fork download
  1. #include <iostream>
  2. #include <map>
  3. #include <set>
  4. #include <utility>
  5.  
  6. using std :: cout;
  7.  
  8. using std :: map;
  9.  
  10. using std :: set;
  11.  
  12. using std :: make_pair;
  13. using std :: pair;
  14.  
  15. template<typename T>class serialisation{
  16. public:
  17. virtual ~serialisation ( );
  18. protected:
  19. virtual void serialise ( const T t ) = 0;
  20. };
  21.  
  22. template<typename T>serialisation<T> :: ~serialisation ( ){
  23. }
  24.  
  25. template<typename T>class serialiser0;
  26.  
  27. template<>class serialiser0<int>:public serialisation<int>{
  28. public:
  29. void serialise ( const int t );
  30. };
  31.  
  32. void serialiser0<int>:: serialise ( const int t ){
  33. cout << t << '\n';
  34. }
  35.  
  36. template<typename T>class Container_serialiser0:public serialisation<T>{
  37. public:
  38. void serialise ( const T t );
  39. private:
  40. serialiser0<typename T :: value_type>value_serialiser;
  41. };
  42.  
  43. template<typename T>void Container_serialiser0<T>:: serialise ( const T t ){
  44. for(typename T :: const_iterator t_iterator = t . begin ( );t_iterator != t . end ( );++ t_iterator){
  45. value_serialiser . serialise ( * t_iterator );
  46. }
  47. }
  48.  
  49. template<typename T>class serialiser1;
  50.  
  51. template<>class serialiser1<pair<const int,set<int> > >:public serialisation<pair<int,set<int> > >{
  52. public:
  53. void serialise ( const pair<int,set<int> >t );
  54. private:
  55. serialiser0<int>t_first_serialiser;
  56.  
  57. Container_serialiser0<set<int> >t_second_serialiser;
  58. };
  59.  
  60. void serialiser1<pair<const int,set<int> > >:: serialise ( const pair<int,set<int> >t ){
  61. t_first_serialiser . serialise ( t . first );
  62. t_second_serialiser . serialise ( t . second );
  63. }
  64.  
  65. template<typename T>class Container_serialiser1:public serialisation<T>{
  66. public:
  67. void serialise ( const T t );
  68. private:
  69. serialiser1<typename T :: value_type>value_serialiser;
  70. };
  71.  
  72. template<typename T>void Container_serialiser1<T>:: serialise ( const T t ){
  73. for(typename T :: const_iterator t_iterator = t . begin ( );t_iterator != t . end ( );++ t_iterator){
  74. value_serialiser . serialise ( * t_iterator );
  75. }
  76. }
  77.  
  78. int main ( ){
  79. set<int>t;
  80. t . insert ( 2 );
  81. t . insert ( 3 );
  82. Container_serialiser0<set<int> >t_serialiser;
  83. t_serialiser . serialise ( t );
  84.  
  85. map<int,set<int> >u;
  86. u . insert ( make_pair ( 5,t ) );
  87. u . insert ( make_pair ( 7,t ) );
  88. Container_serialiser1<map<int,set<int> > >u_serialiser;
  89. u_serialiser . serialise ( u );
  90. }
  91.  
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
2
3
5
2
3
7
2
3