std::ranges:: views:: single, std::ranges:: single_view
|
Определено в заголовочном файле
<ranges>
|
||
| (1) | ||
|
template
<
std::
copy_constructible
T
>
requires
std::
is_object_v
<
T
>
|
(начиная с C++20)
(до C++23) |
|
|
template
<
std::
move_constructible
T
>
requires
std::
is_object_v
<
T
>
|
(начиная с C++23) | |
|
namespace
views
{
inline
constexpr
/* неспецифицировано */
single
=
/* неспецифицировано */
;
|
(2) | (начиная с C++20) |
|
Сигнатура вызова
|
||
|
template
<
class
T
>
requires
/* см. ниже */
|
(начиная с C++20) | |
view
, который содержит ровно один элемент указанного значения.
Время жизни элемента связано с родительским
single_view
. Копирование
single_view
создает копию элемента.
Содержание |
Объекты точек кастомизации
Имя
views::single
обозначает
объект точки кастомизации
, который является константным
функциональным объектом
типа
литерального
semiregular
класса. Для подробностей см.
CustomizationPointObject
.
Члены данных
| Участник | Определение |
copyable-box
<T>
value_
(до C++23)
|
единственный элемент представления
( демонстрационный объект-член* ) |
movable-box
<T>
value_
(начиная с C++23)
|
единственный элемент представления
( демонстрационный объект-член* ) |
Функции-члены
создает
single_view
(публичная функция-член) |
|
|
возвращает указатель на элемент
(публичная функция-член) |
|
|
возвращает указатель за элемент
(публичная функция-член) |
|
|
[static]
|
возвращает
false
(публичная статическая функция-член) |
|
[static]
|
возвращает
1
(публичная статическая функция-член) |
|
возвращает указатель на элемент
(публичная функция-член) |
|
Унаследовано от std::ranges::view_interface |
|
|
(C++23)
|
возвращает константный итератор на начало диапазона
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
(C++23)
|
возвращает страж для константного итератора диапазона
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
возвращает, является ли производное представление непустым, предоставляется только если
ranges::empty
применимо к нему
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
возвращает первый элемент в производном представлении, предоставляется если оно удовлетворяет
forward_range
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
возвращает последний элемент в производном представлении, предоставляется только если оно удовлетворяет
bidirectional_range
и
common_range
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
возвращает
n
-й
элемент в производном представлении, предоставляется только если оно удовлетворяет
random_access_range
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
std::ranges::single_view:: single_view
|
single_view
(
)
requires
std::
default_initializable
<
T
>
=
default
;
|
(1) | (начиная с C++20) |
| (2) | ||
|
constexpr
explicit
single_view
(
const
T
&
t
)
;
|
(начиная с C++20)
(до C++23) |
|
|
constexpr
explicit
single_view
(
const
T
&
t
)
requires std:: copy_constructible < T > ; |
(начиная с C++23) | |
|
constexpr
explicit
single_view
(
T
&&
t
)
;
|
(3) | (начиная с C++20) |
|
template
<
class
...
Args
>
requires
std::
constructible_from
<
T, Args...
>
|
(4) | (начиная с C++20) |
Создает объект
single_view
.
value_
, что приводит к инициализации значением содержащегося объекта.
value_
значением
t
.
value_
значением
std
::
move
(
t
)
.
value_
как если бы
value_
{
std::
in_place
,
std::
forward
<
Args
>
(
args
)
...
}
.
std::ranges::single_view:: begin
|
constexpr
T
*
begin
(
)
noexcept
;
constexpr const T * begin ( ) const noexcept ; |
(начиная с C++20) | |
Эквивалентно return data ( ) ; .
std::ranges::single_view:: end
|
constexpr
T
*
end
(
)
noexcept
;
constexpr const T * end ( ) const noexcept ; |
(начиная с C++20) | |
Эквивалентно return data ( ) + 1 ; .
std::ranges::single_view:: empty
|
static
constexpr
bool
empty
(
)
noexcept
;
|
(since C++20) | |
Эквивалентно return false ; .
std::ranges::single_view:: size
|
static
constexpr
std::
size_t
size
(
)
noexcept
;
|
(начиная с C++20) | |
Эквивалентно return 1 ; .
Позволяет
single_view
удовлетворять требованиям
/*tiny-range*/
, как того требует
split_view
.
std::ranges::single_view:: data
|
constexpr
T
*
data
(
)
noexcept
;
constexpr const T * data ( ) const noexcept ; |
(начиная с C++20) | |
Возвращает указатель на содержащееся значение
value_
. Поведение не определено, если
value_
не содержит значения.
Руководства по выводу типа
|
template
<
class
T
>
single_view ( T ) - > single_view < T > ; |
(начиная с C++20) | |
Примечания
Для
single_view
унаследованная функция-член
empty
всегда возвращает
false
, а унаследованная функция преобразования
operator
bool
всегда возвращает
true
.
Пример
#include <iomanip> #include <iostream> #include <ranges> #include <string> #include <tuple> int main() { constexpr std::ranges::single_view sv1{3.1415}; // использует конструктор (const T&) static_assert(sv1); static_assert(not sv1.empty()); std::cout << "1) *sv1.data(): " << *sv1.data() << '\n' << "2) *sv1.begin(): " << *sv1.begin() << '\n' << "3) sv1.size(): " << sv1.size() << '\n' << "4) distance: " << std::distance(sv1.begin(), sv1.end()) << '\n'; std::string str{"C++20"}; std::cout << "5) str = " << std::quoted(str) << '\n'; std::ranges::single_view sv2{std::move(str)}; // использует конструктор (T&&) std::cout << "6) *sv2.data(): " << std::quoted(*sv2.data()) << '\n' << "7) str = " << std::quoted(str) << '\n'; std::ranges::single_view<std::tuple<int, double, std::string>> sv3{std::in_place, 42, 3.14, "😄"}; // использует (std::in_place_t, Args&&... args) std::cout << "8) sv3 содержит кортеж: { " << std::get<0>(sv3[0]) << ", " << std::get<1>(sv3[0]) << ", " << std::get<2>(sv3[0]) << " }\n"; }
Вывод:
1) *sv1.data(): 3.1415
2) *sv1.begin(): 3.1415
3) sv1.size(): 1
4) distance: 1
5) str = "C++20"
6) *sv2.data(): "C++20"
7) str = ""
8) sv3 содержит кортеж: { 42, 3.14, 😄 }
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3428 | C++20 |
single_view
был конвертируемым из
std::in_place_t
|
конструктор сделан явным |
| LWG 4035 | C++20 |
single_view
не предоставлял функцию-член
empty()
|
предоставляет
empty()
|
| P2367R0 | C++20 |
направляющие вывода для
single_view
не выполняли затухание аргумента;
views::single
копировал, но не оборачивал
single_view
|
предоставлена направляющая с затуханием;
сделано всегда оборачивающим |
Смотрите также
|
(C++17)
|
обёртка, которая может содержать или не содержать объект
(шаблон класса) |
|
(C++20)
|
пустое
view
без элементов
(шаблон класса) (шаблон переменной) |
|
(C++20)
|
представление
view
над поддиапазонами, полученными при разделении другого
view
с использованием разделителя
(шаблон класса) (объект адаптера диапазона) |