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

履歴 編集

function
<tuple>

std::tuple::get(C++11)

namespace std {
  template <size_t I, class... Types>
  typename tuple_element<I, tuple<Types...> >::type&
    get(tuple<Types...>& t) noexcept;                        // (1) C++11

  template <size_t I, class... Types>
  constexpr tuple_element_t<I, tuple<Types...>>&
    get(tuple<Types...>&) noexcept;                          // (1) C++14

  template <size_t I, class... types>
  typename tuple_element<I, tuple<Types...> >::type&&
    get(tuple<Types...>&& t) noexcept;                       // (2) C++11

  template <size_t I, class... Types>
  constexpr tuple_element_t<I, tuple<Types...>>&&
    get(tuple<Types...>&&) noexcept;                         // (2) C++14

  template <size_t I, class... Types>
  typename tuple_element<I, tuple<Types...> >::type const&
    get(const tuple<Types...>& t) noexcept;                  // (3) C++11

  template <size_t I, class... Types>
  constexpr const tuple_element_t<I, tuple<Types...>>&
    get(const tuple<Types...>& t) noexcept;                  // (3) C++14

  template <size_t I, class... Types>
  constexpr const tuple_element_t<I, tuple<Types...> >&&
    get(const tuple<Types...>&& t) noexcept;                 // (4) C++17

  template <class T, class... Types>
  constexpr T& get(tuple<Types...>& t) noexcept;             // (5) C++14

  template <class T, class... Types>
  constexpr T&& get(tuple<Types...>&& t) noexcept;           // (6) C++14

  template <class T, class... Types>
  constexpr const T& get(const tuple<Types...>& t) noexcept; // (7) C++14
}

概要

tupleオブジェクトから指定した位置の要素を取得する。

要件

  • (1), (2), (3), (4) : テンプレートパラメータItupleの要素数よりも小さいこと。この要件を満たさない場合は、コンパイルエラーとなる。
  • (5), (6), (7) : 型TTypes...の中にひとつだけ含まれること。この要件を満たさない場合は、コンパイルエラーとなる。

戻り値

  • (1), (2), (3), (4) : tupleオブジェクトtI番目の要素への参照
  • (5), (6), (7) : tupleオブジェクトtに含まれるT型の要素への参照

例外

投げない

基本的な使い方

#include <iostream>
#include <tuple>
#include <string>

int main()
{
  std::tuple<int, char, std::string> t(1, 'a', "hello");

  // 位置を指定して取得する方法。(1)〜(4)
  {
    int& i = std::get<0>(t);
    char& c = std::get<1>(t);
    std::string& s = std::get<2>(t);

    std::cout << i << std::endl;
    std::cout << c << std::endl;
    std::cout << s << std::endl;
  }
  std::cout << std::endl;

  // 型を指定して取得する方法。(5)〜(7)
  {
    int& i = std::get<int>(t);
    char& c = std::get<char>(t);
    std::string& s = std::get<std::string>(t);

    std::cout << i << std::endl;
    std::cout << c << std::endl;
    std::cout << s << std::endl;
  }
}

出力

1
a
hello

1
a
hello

const右辺値参照版が必要な状況 (4)

#include <iostream>
#include <tuple>
#include <string>

const std::tuple<int, std::string, double> f()
{
  return {1, "Hello", 3.14};
}

int main()
{
  // f()の戻り値型がconst tuple&&となるので、
  // tuple&&をとるオーバーロードでは受け取れない
  std::string s = std::get<1>(f());

  std::cout << s << std::endl;
}

出力

Hello

バージョン

言語

  • C++11

処理系

関連項目

参照