C++メタグループ-tuple


本稿ではstd::tupleとその使用方法について論じる.
std::tuple
std::tupleは、1つ以上のタイプをバインドできるタイプです.メタグループオブジェクトを作成する場合は、要素のタイプをテンプレートパラメータとして指定する必要があります.関数からメタグループオブジェクトを返すことができます.これにより、不要な構造の作成を回避するために、1つの関数から複数の値を返すことができます.
  • メタグループの作成例は、int,char,stringのセット
    tuple<int, char, string>tmp(1, '2', "3");
    
  • であるtupleを宣言する.
  • 取得要素tupleから値を取得するにはstd::get関数が必要であり、インデックス値をテンプレートパラメータ
    int i = get<0>(tmp);
    char c = get<1>(tmp);
    string s = get<2>(tmp);
    
  • とする.
  • 注意事項
  • メタグループパッケージの要素数よりもインデックスが大きい要素を取得すると、コンパイル時にエラーが発生します.
  • メタグループから要素を取得するときにエラーのタイプを使用すると、エラーが発生します.
  • は、getのテンプレートパラメータとして定数タイプを使用する必要があります.そうしないと、コンパイル時間エラーが発生します.
  • 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は、メタセットタイプの自動導出を容易にする.