boost的ios_state_savers简单说明和用法

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文档。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值