Skip to content

Latest commit

 

History

History
104 lines (81 loc) · 2.45 KB

File metadata and controls

104 lines (81 loc) · 2.45 KB

tuple_size

  • utility[meta header]
  • std[meta namespace]
  • class template[meta id-type]
  • cpp26[meta cpp]
namespace std {
  template <class T> class tuple_size; // 先行宣言

  template <class T, T... Values>
  struct tuple_size<integer_sequence<T, Values...>>
    : integral_constant<size_t, sizeof...(Values)> {};
}
  • integral_constant[link /reference/type_traits/integral_constant.md]
  • integer_sequence[link ../integer_sequence.md]

概要

tuple_sizeは、タプルとして見なせる型の要素数を取得するためのクラスである。

<utility>ヘッダでは、integer_sequenceに関する特殊化を提供する。これにより、構造化束縛およびtemplate forinteger_sequenceを使用できる。

基本的な使い方

#include <utility>

int main()
{
  static_assert(std::tuple_size<std::integer_sequence<int, 0, 1, 2>>::value == 3);
}
  • std::tuple_size[color ff0000]

出力

構造化束縛で使用する

構造化束縛はtuple_sizeの値を要素数として認識する。

#include <iostream>
#include <utility>

template <std::size_t Count>
void print_indices() {
  // tuple_sizeが要素数Countを伝え、tuple_element/getで各値が取り出される
  constexpr auto [...Index] = std::make_index_sequence<Count>{};
  ((std::cout << Index << ' '), ...);
  std::cout << std::endl;
}

int main()
{
  print_indices<3>();
}
  • std::make_index_sequence[link ../make_index_sequence.md]

出力

0 1 2 

template for文で使用する

template fortuple_sizeの値分だけ本体を展開する。

#include <iostream>
#include <utility>

int main()
{
  // tuple_sizeが要素数3を伝え、本体が3回展開される
  template for (auto I : std::make_index_sequence<3>{}) {
    std::cout << I << ' ';
  }
  std::cout << std::endl;
}
  • std::make_index_sequence[link ../make_index_sequence.md]

出力

0 1 2 

バージョン

言語

  • C++26

処理系

  • Clang: 23 [mark verified]
  • GCC: 16.1 [mark verified]
  • Visual C++: 2026 Update 2 [mark noimpl]

参照