最終更新日時(UTC):
が更新

履歴 編集

class template
<utility>

std::tuple_size(C++26)

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)> {};
}

概要

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);
}

出力

構造化束縛で使用する

構造化束縛は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>();
}

出力

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;
}

出力

0 1 2 

バージョン

言語

  • C++26

処理系

参照