std::ranges:: views:: istream, std::ranges:: basic_istream_view, std::ranges:: istream_view, std::ranges:: wistream_view
|
定义于头文件
<ranges>
|
||
|
template
<
std::
movable
Val,
class
CharT,
class
Traits
=
std::
char_traits
<
CharT
>
>
|
(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
>
|
(4) | (C++20 起) |
|
辅助概念
|
||
|
template
<
class
Val,
class
CharT,
class
Traits
>
concept
/*stream-extractable*/
=
|
(5) | ( 仅用于阐释* ) |
U
定义为
std::
remove_reference_t
<
decltype
(
e
)
>
。
U
未同时满足公开且明确地派生自
std::
basic_istream
<
typename
U
::
char_type
,
typename
U
::
traits_type
>
,则程序非良构,这可能导致
替换失败
。
Val
的左值可以从类型为
std::
basic_istream
<
CharT, Traits
>
的左值中提取。
basic_istream_view
的迭代器类型是仅移动类型:它不满足
LegacyIterator
要求,因此无法与C++20之前的
algorithms
协同工作。
目录 |
定制点对象
名称
views::istream<T>
表示一个
定制点对象
,它是一个常量
函数对象
,具有
字面量
类型的
semiregular
类类型。详情参见
定制点对象
。
数据成员
| 成员 | 定义 |
std::
basic_istream
<
CharT, Traits
>
*
stream_
|
指向输入流的指针
( 仅用于说明的成员对象* ) |
Val
value_
|
存储的值
( 仅用于说明的成员对象* ) |
成员函数
构造
basic_istream_view
(公开成员函数) |
||
|
返回迭代器
(公开成员函数) |
||
|
返回
std::default_sentinel
(公开成员函数) |
||
继承自 std::ranges::view_interface |
||
|
(C++23)
|
返回指向范围起始的常量迭代器
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
|
(C++23)
|
返回范围常量迭代器的哨位
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
|
尽管
|
(C++23 前) |
std::ranges::basic_istream_view:: basic_istream_view
|
constexpr
explicit
basic_istream_view ( std:: basic_istream < CharT, Traits > & stream ) ; |
(C++20 起) | |
用
std::
addressof
(
stream
)
初始化
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 起) | |
嵌套类
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'; }
输出: