名前空間
変種
操作

std::make_from_tuple

提供: cppreference.com
< cpp‎ | utility
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ (C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
make_from_tuple
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
ヘッダ <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]