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
という名前は、
カスタマイゼーションポイントオブジェクト
を表します。これは、
関数オブジェクト
のconstで、
リテラル
semiregular
クラス型です。詳細は
CustomizationPointObject
を参照してください。
データメンバ
| メンバー | 定義 |
copyable-box
<T>
value_
(C++23まで)
|
ビューの単一要素
( 説明専用メンバーオブジェクト* ) |
movable-box
<T>
value_
(C++23以降)
|
ビューの単一要素
( 説明専用メンバーオブジェクト* ) |
メンバー関数
single_view
を構築する
(public member function) |
|
|
要素へのポインタを返す
(public member function) |
|
|
要素の次の位置へのポインタを返す
(public member function) |
|
|
[static]
|
false
を返す
(public static member function) |
|
[static]
|
1
を返す
(public static member function) |
|
要素へのポインタを返す
(public member function) |
|
std::ranges::view_interface から継承 |
|
|
(C++23)
|
範囲の先頭を指す定数イテレータを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
(C++23)
|
範囲の定数イテレータの番兵を返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューが空でないかどうかを返す(
ranges::empty
が適用可能な場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの先頭要素を返す(
forward_range
を満たす場合に提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの末尾要素を返す(
bidirectional_range
かつ
common_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの
n
番目
の要素を返す(
random_access_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
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
)
で初期化します。
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
;
|
(C++20以降) | |
return false ; と等価。
std::ranges::single_view:: size
|
static
constexpr
std::
size_t
size
(
)
noexcept
;
|
(C++20以降) | |
return
1
;
と等価。
single_view
が
split_view
によって要求される
/*tiny-range*/
をモデル化することを可能にする。
(注:指定されたHTMLタグ内のテキストコンテンツが空であるため、翻訳対象となるテキストが存在しません。HTML構造とID属性は原文のまま保持されています)
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 holds a tuple: { " << 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 holds a tuple: { 42, 3.14, 😄 }
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3428 | C++20 |
single_view
は
std::in_place_t
からの変換可能であった
|
コンストラクタが明示的(explicit)に変更された |
| LWG 4035 | C++20 |
single_view
はメンバ関数
empty()
を提供していなかった
|
empty()
を提供するようになった
|
| P2367R0 | C++20 |
single_view
の推論ガイドが引数のdecayに失敗していた;
views::single
が
single_view
をコピーするだけでラップしていなかった
|
引数をdecayするガイドを提供;
常にラップするように変更 |
関連項目
|
(C++17)
|
オブジェクトを保持する場合と保持しない場合があるラッパー
(クラステンプレート) |
|
(C++20)
|
要素を持たない空の
view
(クラステンプレート) (変数テンプレート) |
|
(C++20)
|
デリミタを使用して別の
view
を分割して得られる部分範囲に対する
view
(クラステンプレート) (レンジアダプタオブジェクト) |