C++17 の構造化束縛を range-based for で使う
C++17 では構造化束縛という言語機能が追加されました。
これは std::tie
のように std::tuple
などを個別に変数で受け取る事が出来る機能です。
auto homu = std::make_tuple(1, "homu", 14); // std::tuple の要素を個別に受け取る auto [id, name, age] = homu;
std::tie
とは違い変数定義で使用する事が出来ます。
range-based for で使う
これだけでも便利なのですが、range-based for と組み合わせることで更に便利になります。
#include <tuple> #include <vector> #include <string> #include <iostream> int main(){ std::vector<std::tuple<int, std::string, int>> vc = { { 1, "homu", 14 }, { 2, "mami", 15 }, { 3, "mado", 14 } }; for(auto&& [id, name, age] : vc){ std::cout << "id:" << id << ", name:" << name << ", age:" << age << std::endl; } return 0; } /* output: id:1, name:homu, age:14 id:2, name:mami, age:15 id:3, name:mado, age:14 */
https://wandbox.org/permlink/HwbLhRyBDCdQDsT8
こんな感じに range-based for の変数定義でも構造化束縛を使うことが出来ます。
ますます std::tuple
が便利になりますね。