Boost IO State Savers Libraryを使用すると、ストリームオブジェクトを以前の状態に戻すことができる。
boost::ios_flags_saver
にistream
もしくはostream
オブジェクトへの参照を渡すことで、そのスコープを抜ける際にフォーマットフラグを以前の状態に戻してくれる。
#include <iostream>
#include <iomanip>
#include <boost/io/ios_state.hpp>
void disp_hex(std::ostream& os, int value)
{
// スコープを抜けたらフォーマットフラグを戻す
boost::io::ios_flags_saver ifs(os);
os << std::hex << value << std::endl;
}
int main()
{
disp_hex(std::cout, 10); // 16進数で出力
std::cout << 10 << std::endl; // 10進数で出力
}
実行結果:
a
10