std::getとは何?使い方も一緒に

C++のコードを読んでいたところ以下のようなコードを目にした。

bool status = std::get<1>(datainfo);

std::getという構文自体を目にしたことが無かったので自分はこの意味が全く分からなかった。
いろいろ調べてみると、Tupleのデータを取り出す時に使う構文だということが分かったのでまとめておこうと思う。

Tupleとは

関数の引数や戻り値で複数のデータを渡したいが、
そのためにクラスや構造体を作るのはちょっと面倒だなあということがたまにある。
そのような場合にTupleを使う。
Tupleというのは複数個のデータを1つにまとめたもので、このように定義する。

std::tuple<int, double, bool> tupleData = std::tuple<int, double, bool>(1, 0.1, true);

このTupleで定義したデータを使うことで関数の引数を1つで扱える。

std::getの使い道

Tupleのデータを取り出したい場合に使うのがstd::getだ。
std::getの後ろに何番目のデータを取り出したいかを指定することで、
指定した位置のデータを取り出せる。

int firstValue = std::get<0>(tupleData); // 1つ目
double secondValue = std::get<1>(tupleData); // 2つ目
bool thirdValue = std::get<2>(tupleData); // 3つ目


ちなみに、データを更新する時もgetを使って行う。

std::get<0>(tupleData) = 2;
std::get<1>(tupleData) = 0.2;
std::get<2>(tupleData) = false;

getして更新するのは少し変な感じをするが、getで変数の参照を取得しそこに書き込むと考えると分かりやすい。