fork(1) 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 serialiser;
  26.  
  27. template<>class serialiser<int>:public serialisation<int>{
  28. public:
  29. void serialise ( const int t );
  30. };
  31.  
  32. void serialiser<int>:: serialise ( const int t ){
  33. cout << t << '\n';
  34. }
  35.  
  36. template<typename T>class Container_serialiser:public serialisation<T>{
  37. public:
  38. void serialise ( const T t );
  39. private:
  40. serialiser<typename T :: value_type>value_serialiser;
  41. };
  42.  
  43. template<typename T>void Container_serialiser<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<>class serialiser<pair<int,set<int> > >:public serialisation<pair<int,set<int> > >{
  50. public:
  51. void serialise ( const pair<int,set<int> >t );
  52. private:
  53. serialiser<int>t_first_serialiser;
  54.  
  55. Container_serialiser<set<int> >t_second_serialiser;
  56. };
  57.  
  58. void serialiser<pair<int,set<int> > >:: serialise ( const pair<int,set<int> >t ){
  59. t_first_serialiser . serialise ( t . first );
  60. t_second_serialiser . serialise ( t . second );
  61. }
  62.  
  63. int main ( ){
  64. set<int>t;
  65. t . insert ( 2 );
  66. t . insert ( 3 );
  67. Container_serialiser<set<int> >t_serialiser;
  68. t_serialiser . serialise ( t );
  69.  
  70. map<int,set<int> >u;
  71. u . insert ( make_pair ( 5,t ) );
  72. u . insert ( make_pair ( 7,t ) );
  73. Container_serialiser<map<int,set<int> > >u_serialiser;
  74. u_serialiser . serialise ( u );
  75. }
  76.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In instantiation of 'class Container_serialiser<std::map<int, std::set<int> > >':
prog.cpp:73:44:   required from here
prog.cpp:40:39: error: 'Container_serialiser<T>::value_serialiser' has incomplete type
   serialiser<typename T :: value_type>value_serialiser;
                                       ^
prog.cpp:25:27: note: declaration of 'class serialiser<std::pair<const int, std::set<int> > >'
 template<typename T>class serialiser;
                           ^
stdout
Standard output is empty