istream_viewとは何ですか?いつ使用しますか?

Dec 12 2020

どうやら、C ++ 20には新しいstd::istream関連構造がありますstd::istream_view。その上のcppreferenceページは現在スタブです。それで、「ビューistream」とは何ですか、そしてそれを何に使用できますか?


†-わかりました。技術的にはstd::basic_istream_viewそのページについてのページにリダイレクトされ、そのページはスタブです。

回答

3 einpoklum Dec 12 2020 at 05:32

Anstd::istream_view<T>範囲です; より具体的には、ビューとして形成された範囲。標準ライブラリへのこの追加std::ranges::viewsは、任意の範囲のビューではなく、のビューであることを除いて、下にあるものと似ていますstd::istream

では、どのような「表示」が適用されstd::istreamますか?istream文字のストリームでTあり、選択した任意のタイプの要素ではないことを思い出してください。これらの文字を連続したT'に解析する怠惰なアプリケーションは、istreamの「表示」です。これは、k番目の要素は、あるstd::istream_view<T>(is)あなたが実行しているk番目の時間を取得したいものですis >> ttタイプのT

範囲で機能するコードを入力データに直接適用する場合は、std::istream_view(慎重に)を使用します。最初に入力をより「古い」方法でデータ構造に解析してから、その構造で作業するのではありません。範囲として。

他の人は何であるかを引き受けますstd::istream_view

  • @BarryはT、istreamからsを解析するコルーチンに相当すると説明しています。詳細については、この回答をお読みください(ranges-v3のistreamビューに関するものであり、その多くが標準の範囲ライブラリになりました)。
  • @NicolBolasは、これを「std::istream_iterator<T>C ++ 20ビューインターフェイスでのラップ」の結果であると見なします。