以下に、抽出子のパターンを示します。
template<class charT, class Traits> basic_istream<charT, Traits>& operator >> (basic_istream<charT, Traits >& is, UserDefinedType& x) { ios_base::iostate err = 0; try { typename basic_istream<charT, Traits>::sentry ipfx(is); if(ipfx) { // 必要な操作を行ってください。 // 一般にはストリームのロケールやバッファにアクセスします。 // MT 環境ではストリームメンバー関数を呼び出さないでください。 // 必要に応じて err 変数に状態ビットを追加してください。たとえば // () err |= ios_base::failbit; ならば } } // 実行 catch(...) //1 { bool flag = FALSE; try { is.setstate(ios_base::failbit); } //2 catch( ios_base::failure ) { flag= TRUE; } //3 if ( flag ) throw; //4 } if ( err ) is.setstate(err); //5 return is; }
同様に、挿入子のパターンを次に示します。
template<class charT, class Traits> basic_ostream<charT, Traits>& operator << (basic_ostream<charT, Traits >& os, const UserDefinedType& x) { ios_base::iostate err = 0; try { typename basic_ostream<charT, Traits>::sentry opfx(os); if(opfx) { // 必要な操作を行ってください。 // 一般にはストリームのロケールやバッファにアクセスします。 // MT 環境ではストリームメンバー関数を呼び出さないでください。 // 必要に応じて err 変数に状態ビットを追加してください。たとえば // () err |= ios_base::failbit; ならば // 使用後はフィールド幅をリセットしてください。すなわち、 // os.width(0); } } //実行 catch(...) { bool flag = FALSE; try { os.setstate(ios_base::failbit); } catch( ios_base::failure ) { flag= TRUE; } if ( flag ) throw; } if ( err ) os.setstate(err); return os; }
Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。
OEM リリース, 1998 年 6 月