/////////////////////////////////////////////////////////////// // Cereal.cpp - demonstrate serialization of STL Containers // // // // Jim Fawcett, CSE687 - Object Oriented Design, Spring 2008 // /////////////////////////////////////////////////////////////// #include #include #include #include #include //template //struct IsContainer { enum { value=false }; }; //template < template std::string SerializeContainerOfContainer(const C& c) { std::string str; str += typeid(C).name(); str += "\n\n"; C::const_iterator iter; for(iter=c.begin(); iter!=c.end(); ++iter) str += SerializeContainer(*iter); str += "\n"; return str; } template std::string SerializeContainer(const C& c) { std::ostringstream strm; strm << typeid(C).name() << std::endl; strm << typeid(C::value_type).name() << std::endl; C::const_iterator iter; for(iter=c.begin(); iter!=c.end(); ++iter) strm << *iter << std::endl; strm << std::endl; return strm.str(); } void main() { std::cout << "\n Demonstrate Serialization of STL Types - CerealKiller "; std::cout << "\n =======================================================\n\n"; std::string arr[5] = { "aardvark", "chameleon", "platypus", "viper", "zebra" }; std::list ls(arr,arr+5); std::string temp; temp = SerializeContainer(ls); std::vector vi; vi.push_back(0); vi.push_back(1); vi.push_back(2); temp += SerializeContainer(vi); std::cout << temp.c_str() << "\n\n"; std::vector vi2; vi2.push_back(0); vi2.push_back(-1); vi2.push_back(-2); std::list< std::vector > lv; lv.push_back(vi); lv.push_back(vi2); temp = SerializeContainerOfContainer(lv); std::cout << temp.c_str() << "\n\n"; }