名前空間
変種
操作

std::make_from_tuple

提供: cppreference.com
< cpp‎ | utility
 
 
 
ヘッダ <tuple> で定義
template <class T, class Tuple>
constexpr T make_from_tuple(Tuple&& t);
(C++17およびそれ以降)

タプル t の要素をコンストラクタへの引数として使用して、 T 型のオブジェクトを構築します。

目次

[編集] 引数

t - T のコンストラクタへの引数として使用される値を要素に持つタプル

[編集] 戻り値

構築された T のオブジェクト。

[編集] ノート

タプルは std::tuple である必要はなく、 std::getstd::tuple_size をサポートしていれば何でも使用することができます。 特に std::arraystd::pair を使用することができます。

コピーの省略が保証されているため、 T はムーブ可能である必要はありません。

[編集] 実装例

namespace detail {
template <class T, class Tuple, std::size_t... I>
constexpr T make_from_tuple_impl( Tuple&& t, std::index_sequence<I...> )
{
  return T(std::get<I>(std::forward<Tuple>(t))...);
}
} // namespace detail
 
template <class T, class Tuple>
constexpr T make_from_tuple( Tuple&& t )
{
    return detail::make_from_tuple_impl<T>(std::forward<Tuple>(t),
        std::make_index_sequence<std::tuple_size_v<std::remove_reference_t<Tuple>>>{});
}

[編集]

#include <iostream>
#include <tuple>
 
struct Foo {
    Foo(int first, float second, int third) {
        std::cout << first << ", " << second << ", " << third << "\n";
    }
};
 
int main()
{
   auto tuple = std::make_tuple(42, 3.14f, 0);
   std::make_from_tuple<Foo>(std::move(tuple));
}

出力:

42, 3.14, 0

[編集] 関連項目

引数の型によって定義される型の tuple オブジェクトを作成します
(関数テンプレート) [edit]
右辺値参照の tuple を作成します
(関数テンプレート) [edit]
(C++17)
タプルを引数として使用して関数を呼びます
(関数テンプレート) [edit]