std::get
ある種のシーケンスから項目を取得するための汎用関数テンプレートです。
これは、 、、およびstd::tuple
の間で一般的なインターフェイスの一部です。ユーザーとして、それを他のものに一般化することができます。tuple
array
pair
std::array< int, 5 > blah {{ 2, 42, 9, 1, 3 }};
int fortytwo = std::get< 1 >( blah );
シーケンス インデックスは と同様に<2>
テンプレート引数ですが、型ではなく値です。テンプレートはこれを可能にします。それらは非型引数と呼ばれ、より一般的な型引数と対等に存在します。(ただし、明確で正確な値のみが許可されるため、型以外の引数の型には一定の制限があります。)<int>
std::vector<int>
テンプレートはコンパイル時に処理されるため、テンプレート引数はコンパイル時の定数でなければならないことに注意してください。これは、少なくとも C++11 ではうまくいきません。
int fortytwo = std::get< std::get< 3 >( blah ) >( blah );
(構造体の内容が定数である限り、このconstexpr
機能を使用して、そのようなことをサポートするカスタム関数を作成することは可能ですが、C++14 には がある予定constexpr get
なので、これは機能します。)