std:: get (std::tuple)
|
定義済みヘッダー
<tuple>
|
||
|
template
<
std::
size_t
I,
class
...
Types
>
typename
std::
tuple_element
<
I,
std::
tuple
<
Types...
>>
::
type
&
|
(1) |
(C++11以降)
(C++14以降constexpr) |
|
template
<
std::
size_t
I,
class
...
Types
>
typename
std::
tuple_element
<
I,
std::
tuple
<
Types...
>>
::
type
&&
|
(2) |
(C++11以降)
(C++14以降constexpr) |
|
template
<
std::
size_t
I,
class
...
Types
>
const
typename
std::
tuple_element
<
I,
std::
tuple
<
Types...
>>
::
type
&
|
(3) |
(C++11以降)
(C++14以降constexpr) |
|
template
<
std::
size_t
I,
class
...
Types
>
const
typename
std::
tuple_element
<
I,
std::
tuple
<
Types...
>>
::
type
&&
|
(4) |
(C++11以降)
(C++14以降constexpr) |
|
template
<
class
T,
class
...
Types
>
constexpr T & get ( std:: tuple < Types... > & t ) noexcept ; |
(5) | (C++14以降) |
|
template
<
class
T,
class
...
Types
>
constexpr T && get ( std:: tuple < Types... > && t ) noexcept ; |
(6) | (C++14以降) |
|
template
<
class
T,
class
...
Types
>
constexpr const T & get ( const std:: tuple < Types... > & t ) noexcept ; |
(7) | (C++14以降) |
|
template
<
class
T,
class
...
Types
>
constexpr const T && get ( const std:: tuple < Types... > && t ) noexcept ; |
(8) | (C++14以降) |
[
0
,
sizeof...
(
Types
)
)
の範囲の整数値でなければなりません。
T
の要素を抽出します。その型の要素がタプル内にちょうど1つ存在しない場合、コンパイルに失敗します。
目次 |
パラメータ
| t | - | 内容を抽出するタプル |
戻り値
選択された要素への参照 t 。
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_tuples_by_type
|
201304L
|
(C++14) | 型によるタプルのアドレッシング ( 5-8 ) |
例
#include <cassert> #include <iostream> #include <string> #include <tuple> int main() { auto x = std::make_tuple(1, "Foo", 3.14); // インデックスベースのアクセス std::cout << "( " << std::get<0>(x) << ", " << std::get<1>(x) << ", " << std::get<2>(x) << " )\n"; // 型ベースのアクセス (C++14以降) std::cout << "( " << std::get<int>(x) << ", " << std::get<const char*>(x) << ", " << std::get<double>(x) << " )\n"; const std::tuple<int, const int, double, double> y(1, 2, 6.9, 9.6); const int& i1 = std::get<int>(y); // OK: 曖昧ではない assert(i1 == 1); const int& i2 = std::get<const int>(y); // OK: 曖昧ではない assert(i2 == 2); // const double& d = std::get<double>(y); // エラー: 不適格 (曖昧) // 注: std::tieと構造化束縛は // タプルを個々のオブジェクトに展開するために使用できます }
出力:
( 1, Foo, 3.14 ) ( 1, Foo, 3.14 )
欠陥報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2485 |
C++11 (インデックスによる)
C++14 (型による) |
const tuple && のオーバーロードが存在しない | これらのオーバーロードを追加 ( ( 4 ) および ( 8 ) ) |
関連項目
|
(C++11)
|
array
の要素にアクセスする
(関数テンプレート) |
|
(C++11)
|
pair
の要素にアクセスする
(関数テンプレート) |
|
(C++17)
|
インデックスまたは型(型が一意の場合)を指定してvariantの値を読み取る。エラー時には例外をスローする
(関数テンプレート) |
|
(C++20)
|
std::ranges::subrange
からイテレータまたは番兵を取得する
(関数テンプレート) |
|
(C++26)
|
std::complex
から実部または虚部への参照を取得する
(関数テンプレート) |
|
(C++11)
|
左辺値参照の
tuple
を作成する、またはtupleを個々のオブジェクトに展開する
(関数テンプレート) |
| Structured binding (C++17) | 指定された名前を初期化子のサブオブジェクトまたはtuple要素にバインドする |