📄 io.cpp
字号:
/*============================================================================= Copyright (C) 1999-2003 Jaakko Jarvi Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)==============================================================================*/#include <boost/detail/lightweight_test.hpp>#include <boost/fusion/container/vector/vector.hpp>#include <boost/fusion/container/generation/make_vector.hpp>#include <boost/fusion/sequence/comparison/equal_to.hpp>#include <boost/fusion/sequence/io/out.hpp>#include <boost/fusion/sequence/io/in.hpp>#include <fstream>#include <iterator>#include <algorithm>#include <string>#if defined BOOST_NO_STRINGSTREAM# include <strstream>#else# include <sstream>#endifusing boost::fusion::vector;using boost::fusion::make_vector;using boost::fusion::tuple_close;using boost::fusion::tuple_open;using boost::fusion::tuple_delimiter;#if defined BOOST_NO_STRINGSTREAM using std::ostrstream; using std::istrstream; typedef ostrstream useThisOStringStream; typedef istrstream useThisIStringStream;#else using std::ostringstream; using std::istringstream; typedef ostringstream useThisOStringStream; typedef istringstream useThisIStringStream;#endifusing std::endl;using std::ofstream;using std::ifstream;using std::string;intmain(){ using boost::fusion::tuple_close; using boost::fusion::tuple_open; using boost::fusion::tuple_delimiter; useThisOStringStream os1; // Set format [a, b, c] for os1 os1 << tuple_open('['); os1 << tuple_close(']'); os1 << tuple_delimiter(','); os1 << make_vector(1, 2, 3); BOOST_TEST (os1.str() == std::string("[1,2,3]") ); { useThisOStringStream os2; // Set format (a:b:c) for os2; os2 << tuple_open('('); os2 << tuple_close(')'); os2 << tuple_delimiter(':'); os2 << make_vector("TUPU", "HUPU", "LUPU", 4.5); BOOST_TEST (os2.str() == std::string("(TUPU:HUPU:LUPU:4.5)") ); } // The format is still [a, b, c] for os1 os1 << make_vector(1, 2, 3); BOOST_TEST (os1.str() == std::string("[1,2,3][1,2,3]") ); std::ofstream tmp("temp.tmp"); tmp << make_vector("One", "Two", 3); tmp << tuple_delimiter(':'); tmp << make_vector(1000, 2000, 3000) << endl; tmp.close(); // When reading tuples from a stream, manipulators must be set correctly: ifstream tmp3("temp.tmp"); vector<string, string, int> j; tmp3 >> j; BOOST_TEST (tmp3.good() ); tmp3 >> tuple_delimiter(':'); vector<int, int, int> i; tmp3 >> i; BOOST_TEST (tmp3.good() ); tmp3.close(); // reading vector<int, int, int> in format (a b c); useThisIStringStream is("(100 200 300)"); vector<int, int, int> ti; BOOST_TEST(bool((is >> ti) != 0)); BOOST_TEST(ti == make_vector(100, 200, 300)); // Note that strings are problematic: // writing a tuple on a stream and reading it back doesn't work in // general. If this is wanted, some kind of a parseable string class // should be used. return boost::report_errors();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -