C++相談室 part43
■ このスレッドは過去ログ倉庫に格納されています
0392デフォルトの名無しさん
2005/09/06(火) 04:49:59それは勘違い。std::basic_ostreamの反復子は出力反復子(ostream iterator)のため、
tellp()、seekp()メンバ関数の意味を正しくインプリメントできないのだ。
同様にして、std::basic_istreamの反復子は入力反復子(input iterator)のため、
tellg()、seekg()メンバ関数の意味を正しくインプリメントできない。
tellp()、tellg()、seekp()、seekg()は、前方反復子(forward iterator)でのみ、正しい
本来の意味のある値を返す。この前方反復子を備えているクラスは、std::basic_fstreamと
std::basic_stringstreamだけだ。
>>371の、random access iteratorというのは間違い。そこまで厳しい要件を必要と
しない。しかし、おっしゃる通り、std::basic_ostreamとstd::basic_istreamを継承した
クラスでないと、tellp()〜seekg()メンバ関数が使えない。従ってstd::vectorのような
ストリームを継承したのではないくコンテナは、それらの特別なメンバ関数がない。
当然std::listのような双方向反復子(bidirectional iterator)を備えたクラスでも、
seek?()、tell?()が使えない。
■ このスレッドは過去ログ倉庫に格納されています