読者です 読者をやめる 読者になる 読者になる

C++14 tupleの型指定get()

C++

N3670 Wording for Addressing Tuples by Type: Revision 2


C++11のstd::tupleには、std::get<N>(t)のようにして、インデックス指定でN番目の型の値を取得する関数がありました。
C++14では、std::get<T>(t)のようにして、tupleオブジェクトから指定した型の値を取得する関数が追加されます。

// <tuple>
namespace std {
  template <class T, class... Types>
  constexpr T& get(tuple<Types...>& t) noexcept;

  template <class T, class... Types>
  constexpr T&& get(tuple<Types...>&& t) noexcept;

  template <class T, class... Types>
  constexpr const T& get(const tuple<Types...>& t) noexcept;
}

<utility>にも、std::pairに関するオーバーロードが追加されます。

tupleに含まれない型を指定した場合は、コンパイルエラーになります。

#include <tuple>

int main()
{
    std::tuple<int, char, double> t(1, 'a', 3.14);
    int& x = std::get<int>(t); // x == 1
}

std::tuple<int, double, double> t;に対するget<double>(t);のように、型が一意に決まらない場合はコンパイルエラーになるそうです。