boost::io::ios_state

トップページ > 入出力 >

abstract

必要なヘッダ
<boost/io/ios_state.hpp>
出来ること
streamの状態退避
リファレンス
en / jp

sample

#include <iostream>
#include <boost/io/ios_state.hpp>
using namespace std;

void print_hex( int n )
{
	boost::io::ios_flags_saver ifs( cout );
	cout << hex << n << endl;
} // ここで ifs のデストラクタが呼ばれる。

int main()
{
	print_hex( 90 );
	cout << 90 << endl;

	return 0;
}

出力例

5a
90

上記の例から単純に ios_flags_save を除いてしまうと、 2回目の出力でも16進表示になってしまいます。

etc

printf では16進数で表示しようと思ったら "%x" などと書いて指定していましたが、iostream では、hex というマニピュレータなるものを送り込むことで設定を変更して対応します。 …と、そこまでは良いのですが、この方式の問題は、 一度モードを16進に変更してしまうとずっとそのままその状態を記憶し続けること。 一変数だけ別の表示にしたい、というような時には、 変更前のストリームの状態を一旦保存して置いて、表示の後に戻す、 という作業が必要になります。ios_stateでは、その 「一旦保存して戻す」という作業を、 コンストラクタ・デストラクタのタイミングで実行してくれます。

保存したい属性(フラグ、精度、表示幅、埋め文字などなど)に応じて、 色々な種類の saver が用意されています。とにかく全部を復元したいときは、 ios_all_saver なんてのも。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0