カテゴリー機能は終了いたしました。まとめ作成時にはタグをご活用ください。
4
対鉱物用武装 @kikairoya
連子を常にiteratorのペアで表現することが自然とは限らない(例: istream_iterator)
Akso de la Malbono @Cryolite
@kikairoya istream_iterator はペア表現でも良いのでは? ostream_iterator を引き合いに出すなら分かりますけれど #boostjp
対鉱物用武装 @kikairoya
@Cryolite istreamは読んでみるまで終端が分からないのでダメです
Akso de la Malbono @Cryolite
@kikairoya ある iterator が終端であるかどうかが分かれば良いのでは? それを singular iterator との equality comparison という syntax で表現するのは自然かどうかはともかく,明確な欠点があります? #boostjp
対鉱物用武装 @kikairoya
@Cryolite ...istream_iteratorはdereferenceに予期しない停止時間がある可能性があって、しかもあるイテレータが終端と一致しているかどうかは内部でdereference(というかread)しないと判別できないのでダメです
Akso de la Malbono @Cryolite
@kikairoya 「.istream_iteratorはdereferenceに予期しない停止時間がある可能性があって」とはどういう意味ですか?
対鉱物用武装 @kikairoya
@Cryolite 標準入力あるいはネットワーク、ハードディスク、光学ディスクの場合はブロックしますよね
Akso de la Malbono @Cryolite
@kikairoya それは分かりますけれど,それと論旨とどういう関係があるのかイマイチ理解できないのでもう少し説明を.
対鉱物用武装 @kikairoya
@Cryolite takenだったかの実装で、停止を判断する順序の問題で1個余計に入力を消費してしまう問題があってですね
Akso de la Malbono @Cryolite
@kikairoya うーんと,で,その問題があると何が問題になりますか?
対鉱物用武装 @kikairoya
@Cryolite いや入力を余計に消費すること自体が問題ですよね、istream_iteratorはsingle-passなので特に
Akso de la Malbono @Cryolite
@kikairoya taken ってどういうのでしたっけか?
Akso de la Malbono @Cryolite
@kikairoya ああ,はい.思い出しました.それ single-pass でできるから別に良いのでは?
対鉱物用武装 @kikairoya
@Cryolite 元の入力が1個捨てられるじゃないですか
Akso de la Malbono @Cryolite
@kikairoya どこを問題にしていますか? taken の内部実装の話ですか? それとも, taken に与えた istream_iterator とそれ以外の istream_iterator との競合の話ですか?
対鉱物用武装 @kikairoya
@Cryolite イテレータペアによる実装では余計に1文字読む問題が解決できないことと、istream_iteratorの元になったistreamの状態が予期しない状態になってしまうことが問題です
Akso de la Malbono @Cryolite
@kikairoya 「イテレータペアによる実装」というのは, istream の入力範囲を istream_iterator のペアで表現した range で表現することを指しているのか, taken が iterator のペアを取ることを指しているのか,どっちですか?
Akso de la Malbono @Cryolite
@kikairoya つまり taken 云々は関係なく,要するに std::istream_iterator がダメということですか?
対鉱物用武装 @kikairoya
@Cryolite istream_iteratorがダメなのと、連子がそのようなダメなイテレータを考慮していないこと両方が問題だと思います
Akso de la Malbono @Cryolite
@kikairoya たとえば taken というアダプタから base となっている istream_iterator を取り出せば,依然として predictable な single-pass iterator のオブジェクトとして扱えるように実装可能なのではないですか?
対鉱物用武装 @kikairoya
@Cryolite 取り出すとは? istream_rangeを受け取れるアダプタすべてに何らかの特殊化を行うというのは現実的ではないですよね
Akso de la Malbono @Cryolite
@kikairoya いや,例えば標準ライブラリに定義されている iterator を取る iterator adapter は base という名前のメンバ関数を持っていますよね?
対鉱物用武装 @kikairoya
@Cryolite 終端判定はどうするんです? 終端判定に副作用が存在することが第一の問題で、istream_iteratorはそうでない実装は不可能だと思いますが
残りを読む(6)

コメント

ログインして広告を非表示にする
ログインして広告を非表示にする