名前空間
変種
操作

std::ranges::views::istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::wistream_view

From cppreference.com
< cpp‎ | ranges
 
 
Rangesライブラリ
Rangeアダプタ
 
 
ヘッダ <ranges> で定義
template< std::movable Val, class CharT,

          class Traits = std::char_traits<CharT> >
    requires std::default_initializable<Val> &&
             /*stream-extractable*/<Val, CharT, Traits>
class basic_istream_view

    : public ranges::view_interface<basic_istream_view<Val, CharT, Traits>>
(1) (C++20以降)
ヘルパーテンプレート
template< class Val >
using istream_view = ranges::basic_istream_view<Val, char>;
(2) (C++20以降)
template< class Val >
using wistream_view = ranges::basic_istream_view<Val, wchar_t>;
(3) (C++20以降)
カスタマイゼーションポイントオブジェクト
namespace views {

    template< class T >
    constexpr /* unspecified */ istream = /* unspecified */;

}
(4) (C++20以降)
ヘルパーコンセプト
template< class Val, class CharT, class Traits >

concept /*stream-extractable*/ =
    requires(std::basic_istream<CharT, Traits>& is, Val& t) {
        is >> t;

    };
(5) (説明用*)
1) operator>> を繰り返し呼び出すことによって要素のシーケンスを生成する範囲ファクトリ。
2,3) char および wchar_t 文字型のための便利なエイリアステンプレート。
4) 任意の適切な部分式 e に対して、views::istream<T>(e)ranges::basic_istream_view<T, typename U::char_type, typename U::traits_type>(e)式同等である。ここで Ustd::remove_reference_t<decltype(e)>
Ustd::basic_istream<typename U::char_type, typename U::traits_type> から、公開かつ曖昧さなく派生していない場合、プログラムは ill-formed であり、置換失敗につながる可能性がある。
5) 展示のみのコンセプト /*stream-extractable*/<Val, CharT, Traits> は、型 Val の左辺値が型 std::basic_istream<CharT, Traits> の左辺値から抽出できる場合に満たされる。

basic_istream_view のイテレータ型はムーブ専用である。これは LegacyIterator 要件を満たさないため、C++20 以前の アルゴリズムでは機能しない。

目次

カスタマイゼーションポイントオブジェクト

views::istream<T> という名前は、リテラル semiregular クラス型の 関数オブジェクト である、カスタマイゼーションポイントオブジェクト を表す。説明の目的のために、その型の cv-非修飾バージョンは __istream_fn<T> と表記される。

__istream_fn<T> のすべてのインスタンスは等しい。同じ引数に対して異なる型の __istream_fn<T> のインスタンスを呼び出した場合の効果は、インスタンスを表す式が左辺値か右辺値か、const 修飾されているかどうかにかかわらず同等である(ただし、volatile 修飾されたインスタンスは呼び出し可能である必要はない)。したがって、views::istream<T> は自由にコピーでき、そのコピーは互換的に使用できる。

一連の型 Args... が、上記の views::istream<T> への引数要件を満たす場合、__istream_fn<T> は以下をモデル化する。

それ以外の場合、__istream_fn<T> の関数呼び出し演算子はオーバーロード解決に参加しない。

[編集] データメンバー

メンバ 定義
std::basic_istream<CharT, Traits>* stream_ 入力ストリームへのポインタ
(説明用のメンバオブジェクト*)
Val value_ 格納された値
(説明用のメンバオブジェクト*)

[編集] メンバ関数

basic_istream_view を構築する
(public member function)
イテレータを返す
(public member function)
std::default_sentinel を返す
(public member function)
std::ranges::view_interface から継承
(C++23)
範囲の先頭への定数イテレータを返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]
(C++23)
範囲の定数イテレータの番兵を返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]

basic_istream_viewstd::ranges::view_interface から派生しているが、継承されたメンバ関数は使用できない。

(C++23まで)

std::ranges::basic_istream_view::basic_istream_view

constexpr explicit
    basic_istream_view( std::basic_istream<CharT, Traits>& stream );
(C++20以降)

stream_std::addressof(stream) で初期化し、value_ を値初期化する。

std::ranges::basic_istream_view::begin

constexpr auto begin();
(C++20以降)

*stream_ >> value_ ; return iterator {*this}; と同等。

std::ranges::basic_istream_view::end

constexpr std::default_sentinel_t end() const noexcept;
(C++20以降)

std::default_sentinel を返す。

[編集] 入れ子クラス

basic_istream_view のイテレータ型
(説明専用メンバクラス*)

[編集]

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <ranges>
#include <sstream>
#include <string>
 
int main()
{
    auto words = std::istringstream{"today is yesterday’s tomorrow"};
    for (const auto& s : std::views::istream<std::string>(words))
        std::cout << std::quoted(s, '/') << ' ';
    std::cout << '\n';
 
    auto floats = std::istringstream{"1.1  2.2\t3.3\v4.4\f55\n66\r7.7  8.8"};
    std::ranges::copy
    (
        std::views::istream<float>(floats),
        std::ostream_iterator<float>{std::cout, ", "}
    );
    std::cout << '\n';
}

出力

/today/ /is/ /yesterday’s/ /tomorrow/
1.1, 2.2, 3.3, 4.4, 55, 66, 7.7, 8.8,

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 3568 C++20 P2325R3 は誤って格納された値をデフォルト初期化した 値初期化に戻された
P2325R3 C++20 デフォルトコンストラクタはとして提供された
viewdefault_initializable でなければならない
と共に削除された
要件
P2432R1 C++20 ranges::istream_view は関数テンプレートだった
そして命名規則に従っていなかった
エイリアステンプレートに変更された。
カスタマイゼーションポイントオブジェクトが追加された

[編集] 関連項目

std::basic_istream から読み取る入力イテレータ
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)