Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
헤더 파일에 정의됨 <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 /* 지정되지 않음 */ istream = /* 지정되지 않음 */ ;

}
(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) views :: istream < T > ( e ) 표현식 동등 합니다 ranges :: basic_istream_view < T, typename U :: char_type , typename U :: traits_type > ( e ) 에 대해, 모든 적절한 부분표현식 e 에서 U std:: remove_reference_t < decltype ( e ) > 인 경우.
프로그램은 U std:: basic_istream < typename U :: char_type , typename U :: traits_type > 에 대해 공개적이고 명확하게 파생되지 않은 경우 형식이 잘못되었으며, 이는 치환 실패 를 초래할 수 있습니다.
5) exposition-only concept /*stream-extractable*/ < Val, CharT, Traits > Val 타입의 lvalue가 std:: basic_istream < CharT, Traits > 타입의 lvalue로부터 추출될 수 있을 때 만족됩니다.

basic_istream_view 의 반복자 타입은 이동 전용입니다: 이는 LegacyIterator 요구 사항을 충족하지 않으므로, C++20 이전의 알고리즘 과 함께 작동하지 않습니다.

목차

커스터마이제이션 포인트 객체

이름 views::istream<T> 사용자 지정 지점 객체 를 나타내며, 이는 함수 객체 의 const이며 리터럴 semiregular 클래스 타입입니다. 자세한 내용은 CustomizationPointObject 을 참조하십시오.

데이터 멤버

멤버 정의
std:: basic_istream < CharT, Traits > * stream_ 입력 스트림에 대한 포인터
( 설명 전용 멤버 객체* )
Val value_ 저장된 값
( 설명 전용 멤버 객체* )

멤버 함수

basic_istream_view 를 생성합니다
(public 멤버 함수)
반복자를 반환합니다
(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_view std::ranges::view_interface 에서 파생되었지만, 상속된 멤버 함수들을 사용할 수 없습니다.

(until 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 기본 생성자가 제공됨
view default_initializable 이어야 함
요구사항과 함께
제거됨
P2432R1 C++20 ranges::istream_view 는 함수 템플릿이었고
명명 규칙을 따르지 않음
별칭 템플릿으로 변경됨;
사용자 정의 지점 객체 추가됨

참고 항목

std::basic_istream 에서 읽어들이는 입력 반복자
(클래스 템플릿)