C++メタグループ-tuple
4529 ワード
本稿ではstd::tupleとその使用方法について論じる.
std::tuple
std::tupleは、1つ以上のタイプをバインドできるタイプです.メタグループオブジェクトを作成する場合は、要素のタイプをテンプレートパラメータとして指定する必要があります.関数からメタグループオブジェクトを返すことができます.これにより、不要な構造の作成を回避するために、1つの関数から複数の値を返すことができます.メタグループの作成例は、int,char,stringのセット であるtupleを宣言する.取得要素tupleから値を取得するにはstd::get関数が必要であり、インデックス値をテンプレートパラメータ とする.注意事項 メタグループパッケージの要素数よりもインデックスが大きい要素を取得すると、コンパイル時にエラーが発生します. メタグループから要素を取得するときにエラーのタイプを使用すると、エラーが発生します. は、getのテンプレートパラメータとして定数タイプを使用する必要があります.そうしないと、コンパイル時間エラーが発生します.
ステップアップ:std::make_tuple
注:コンパイラは
C++11は、要素の数が多い場合に
以上のコードでは、
std::tuple
std::tupleは、1つ以上のタイプをバインドできるタイプです.メタグループオブジェクトを作成する場合は、要素のタイプをテンプレートパラメータとして指定する必要があります.関数からメタグループオブジェクトを返すことができます.これにより、不要な構造の作成を回避するために、1つの関数から複数の値を返すことができます.
tuple<int, char, string>tmp(1, '2', "3");
int i = get<0>(tmp);
char c = get<1>(tmp);
string s = get<2>(tmp);
auto a = get<3>(tmp); //
auto b = get<i>(tmp); //
i = get<2>(tmp); //
ステップアップ:std::make_tuple
注:コンパイラは
tuple
タイプを自動的にエクスポートできません.たとえば、次のようにします.auto tmp{1,'1',"1"}; //
C++11は、要素の数が多い場合に
make_tuple
を宣言する不便を解決するためにtuple
を提供する.パラメータタイプからメタグループ内の要素のターゲットタイプを導出することによって、std :: tuple
オブジェクトを作成します.auto a = make_tuple(1, '2', "3");
以上のコードでは、
make_tuple
は3つのパラメータを受け入れ、int、char、stringのタイプを自動的に導出します.その後、内部にtupleオブジェクトを作成し、初期化して返します.従って、基本的にmake_tuple
は、メタセットタイプの自動導出を容易にする.