std::basic_istream<CharT,Traits>::sentry
class sentry; |
||
クラス basic_istream::sentry のオブジェクトは、入力を行う (書式付きと書式なしどちらも) std::basic_istream のメンバ関数それぞれの先頭で、ローカルスコープ内で構築されます。 このコンストラクタは入力ストリームを準備します。 ストリームがすでに fail 状態かどうか確認し、 tie() されている出力ストリームをフラッシュし、 noskipws フラグがセットされていなければ先行するホワイトスペースをスキップし、必要であればその他の処理系定義の処理を行います。 すべてのクリーンアップは、必要であれば、入力中に例外が投げられた場合にも行われることが保証できるように、デストラクタで行います。
メンバ型
| 型 | 定義 |
traits_type
|
Traits
|
メンバ関数
| sentry オブジェクトを構築します。 すべての準備処理はここで行われます (パブリックメンバ関数) | |
| 書式付き入力後または例外後のストリームオブジェクトの後処理を行います (パブリックメンバ関数) | |
operator= [削除] |
コピー代入可能ではありません (パブリックメンバ関数) |
| ストリームオブジェクトの準備が成功したかどうか調べます (パブリックメンバ関数) |
std::basic_istream::sentry::sentry
<tbody> </tbody> explicit sentry(std::basic_istream<CharT,Traits>& is, bool noskipws = false); |
||
書式付き入力を準備します。
is.good() が false の場合は、 is.setstate(failbit)(since c++11) を呼び、戻ります。 そうでなければ、 is.tie() がヌルポインタでなければ、出力シーケンスを外部ストリームと同期するために is.tie()->flush() を呼びます。 この呼び出しは is.tie() の put 領域が空であれば抑制されます。 処理系は is.rdbuf()->underflow() の呼び出しが発生するまで flush の呼び出しを遅延するかもしれません。 sentry オブジェクトが破棄される前にそのような呼び出しが発生しなければ、それは完全に取り除かれるかもしれません。
noskipws がゼロで is.flags() & ios_base::skipws が非ゼロの場合、この関数は次の利用可能な文字がホワイトスペース文字 (is に現在設定されているロケールによって判定されます) でなくなるまですべてのホワイトスペース文字を抽出して破棄します。 is.rdbuf()->sbumpc() または is.rdbuf()->sgetc() が traits::eof() を返した場合、この関数は setstate(failbit | eofbit) を呼びます (それによって std::ios_base::failure が投げられるかもしれません)。
追加の処理系定義の準備が行われるかもしれません。 これは setstate(failbit) を呼ぶ可能性があります (それによって std::ios_base::failure が投げられるかもしれません)。
準備が完了した後、 is.good() == true であれば、以後の operator bool の呼び出しは true を返します。
引数
| is | - | 準備する入力ストリーム |
| noskipws | - | ホワイトスペースがスキップされるべきでない場合は true
|
例外
ホワイトスペースをスキップするときにファイル終端状況が発生した場合は std::ios_base::failure。
std::basic_istream::sentry::~sentry
<tbody> </tbody> ~sentry(); |
||
何もし���せん。
std::basic_istream::sentry::operator bool
<tbody> </tbody> explicit operator bool() const; |
||
入力ストリームの準備が成功したかどうか調べます。
引数
(なし)
戻り値
入力ストリームの初期化が成功した場合は true、そうでなければ false。
例
#include <iostream>
#include <sstream>
struct Foo
{
char n[5];
};
std::istream& operator>>(std::istream& is, Foo& f)
{
std::istream::sentry s(is);
if (s)
is.read(f.n, 5);
return is;
}
int main()
{
std::string input = " abcde";
std::istringstream stream(input);
Foo f;
stream >> f;
std::cout.write(f.n, 5);
std::cout << '\n';
}
出力:
abcde
関連項目
| 書式付きデータを抽出します (パブリックメンバ関数) | |
| 文字と文字配列を抽出します (関数テンプレート) |