您的位置:首页 > 移动开发 > IOS开发

boost的ios_state_savers简单说明和用法

2012-12-29 14:26 453 查看
1.用途

有时候需要局部地方改变一个流状态变量,时后又需要恢复。

#include <iostream>
#include <boost/io/ios_state.hpp>

using namespace std;

void byte_to_hex(ostream &os, char byte)
{
boost::io::ios_flags_saver ifs(os);
os << hex << static_cast<unsigned>(byte) << endl;
}

int main()
{
char c = 100;
byte_to_hex(cout, c);
cout << 200 << endl;//假如没有boost::io::ios_flags_saver ifs(os);这里输出c8
return 0;
}


2.框架

#include <iosfwd>  // for std::char_traits (declaration)

namespace boost
{
namespace io
{

class ios_flags_saver;
class ios_precision_saver;
class ios_width_saver;
class ios_base_all_saver;

template < typename Ch, class Tr = ::std::char_traits<Ch> >
class basic_ios_iostate_saver;
template < typename Ch, class Tr = ::std::char_traits<Ch> >
class basic_ios_exception_saver;
template < typename Ch, class Tr = ::std::char_traits<Ch> >
class basic_ios_tie_saver;
template < typename Ch, class Tr = ::std::char_traits<Ch> >
class basic_ios_rdbuf_saver;
template < typename Ch, class Tr = ::std::char_traits<Ch> >
class basic_ios_fill_saver;
template < typename Ch, class Tr = ::std::char_traits<Ch> >
class basic_ios_locale_saver;
template < typename Ch, class Tr = ::std::char_traits<Ch> >
class basic_ios_all_saver;

typedef basic_ios_iostate_saver<char>        ios_iostate_saver;
typedef basic_ios_iostate_saver<wchar_t>    wios_iostate_saver;
typedef basic_ios_exception_saver<char>      ios_exception_saver;
typedef basic_ios_exception_saver<wchar_t>  wios_exception_saver;
typedef basic_ios_tie_saver<char>            ios_tie_saver;
typedef basic_ios_tie_saver<wchar_t>        wios_tie_saver;
typedef basic_ios_rdbuf_saver<char>          ios_rdbuf_saver;
typedef basic_ios_rdbuf_saver<wchar_t>      wios_rdbuf_saver;
typedef basic_ios_fill_saver<char>           ios_fill_saver;
typedef basic_ios_fill_saver<wchar_t>       wios_fill_saver;
typedef basic_ios_locale_saver<char>         ios_locale_saver;
typedef basic_ios_locale_saver<wchar_t>     wios_locale_saver;
typedef basic_ios_all_saver<char>            ios_all_saver;
typedef basic_ios_all_saver<wchar_t>        wios_all_saver;

class ios_iword_saver;
class ios_pword_saver;
class ios_all_word_saver;

}
}


3.例子

#include <iostream>
#include <fstream>
#include <boost/io/ios_state.hpp>

using namespace std;

void logging(char* msg)
{
cout << msg << endl;
}

int main()
{
std::string s("logfile.txt");
cout << "log start" << endl;
if (!s.empty()) {
//boost::io::ios_all_saver ifs(cout);//假设在这里,运行时候就会出错。
ofstream ofs(s.c_str());
boost::io::ios_all_saver ifs(cout);
cout.rdbuf(ofs.rdbuf());
cout << "fatal msg" << endl;
}
cout << "log finish" << endl;
return 0;
}
仅是简单的用法说明,具体的还请参照BOOST文档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: