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文檔。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章