C(ry先生とぬー先生の場外バトル

4
若年寄(もう若くない) @kikairoya

連子を常にiteratorのペアで表現することが自然とは限らない(例: istream_iterator)

2011-11-05 15:53:43
Akso de la Malbono @Cryolite

@kikairoya istream_iterator はペア表現でも良いのでは? ostream_iterator を引き合いに出すなら分かりますけれど #boostjp

2011-11-05 15:54:37
若年寄(もう若くない) @kikairoya

@Cryolite istreamは読んでみるまで終端が分からないのでダメです

2011-11-05 15:55:08
Akso de la Malbono @Cryolite

@kikairoya ある iterator が終端であるかどうかが分かれば良いのでは? それを singular iterator との equality comparison という syntax で表現するのは自然かどうかはともかく,明確な欠点があります? #boostjp

2011-11-05 15:57:49
若年寄(もう若くない) @kikairoya

@Cryolite ...istream_iteratorはdereferenceに予期しない停止時間がある可能性があって、しかもあるイテレータが終端と一致しているかどうかは内部でdereference(というかread)しないと判別できないのでダメです

2011-11-05 15:59:59
Akso de la Malbono @Cryolite

@kikairoya 「.istream_iteratorはdereferenceに予期しない停止時間がある可能性があって」とはどういう意味ですか?

2011-11-05 16:04:34
若年寄(もう若くない) @kikairoya

@Cryolite 標準入力あるいはネットワーク、ハードディスク、光学ディスクの場合はブロックしますよね

2011-11-05 16:05:17
Akso de la Malbono @Cryolite

@kikairoya それは分かりますけれど,それと論旨とどういう関係があるのかイマイチ理解できないのでもう少し説明を.

2011-11-05 16:25:14
若年寄(もう若くない) @kikairoya

@Cryolite takenだったかの実装で、停止を判断する順序の問題で1個余計に入力を消費してしまう問題があってですね

2011-11-05 16:27:11
Akso de la Malbono @Cryolite

@kikairoya うーんと,で,その問題があると何が問題になりますか?

2011-11-05 16:31:14
若年寄(もう若くない) @kikairoya

@Cryolite いや入力を余計に消費すること自体が問題ですよね、istream_iteratorはsingle-passなので特に

2011-11-05 16:31:47
Akso de la Malbono @Cryolite

@kikairoya taken ってどういうのでしたっけか?

2011-11-05 16:33:20
Akso de la Malbono @Cryolite

@kikairoya ああ,はい.思い出しました.それ single-pass でできるから別に良いのでは?

2011-11-05 16:34:53
若年寄(もう若くない) @kikairoya

@Cryolite 元の入力が1個捨てられるじゃないですか

2011-11-05 16:35:18
Akso de la Malbono @Cryolite

@kikairoya どこを問題にしていますか? taken の内部実装の話ですか? それとも, taken に与えた istream_iterator とそれ以外の istream_iterator との競合の話ですか?

2011-11-05 16:37:02
若年寄(もう若くない) @kikairoya

@Cryolite イテレータペアによる実装では余計に1文字読む問題が解決できないことと、istream_iteratorの元になったistreamの状態が予期しない状態になってしまうことが問題です

2011-11-05 16:38:43
Akso de la Malbono @Cryolite

@kikairoya 「イテレータペアによる実装」というのは, istream の入力範囲を istream_iterator のペアで表現した range で表現することを指しているのか, taken が iterator のペアを取ることを指しているのか,どっちですか?

2011-11-05 16:44:32
Akso de la Malbono @Cryolite

@kikairoya つまり taken 云々は関係なく,要するに std::istream_iterator がダメということですか?

2011-11-05 17:11:20
若年寄(もう若くない) @kikairoya

@Cryolite istream_iteratorがダメなのと、連子がそのようなダメなイテレータを考慮していないこと両方が問題だと思います

2011-11-05 17:12:21
Akso de la Malbono @Cryolite

@kikairoya たとえば taken というアダプタから base となっている istream_iterator を取り出せば,依然として predictable な single-pass iterator のオブジェクトとして扱えるように実装可能なのではないですか?

2011-11-05 17:16:30
若年寄(もう若くない) @kikairoya

@Cryolite 取り出すとは? istream_rangeを受け取れるアダプタすべてに何らかの特殊化を行うというのは現実的ではないですよね

2011-11-05 17:19:45
Akso de la Malbono @Cryolite

@kikairoya いや,例えば標準ライブラリに定義されている iterator を取る iterator adapter は base という名前のメンバ関数を持っていますよね?

2011-11-05 17:21:29
若年寄(もう若くない) @kikairoya

@Cryolite 終端判定はどうするんです? 終端判定に副作用が存在することが第一の問題で、istream_iteratorはそうでない実装は不可能だと思いますが

2011-11-05 17:23:21