std::make_tuple
來自 cppreference.com
定義於標頭檔案 <tuple> |
||
template< class... Types > std::tuple<VTypes...> make_tuple( Types&&... args ); |
(C++11 起) (C++14 起為 constexpr) |
|
建立一個 tuple 物件,從引數型別推匯出目標型別。
對於 `Types...` 中的每個 `Ti`,`VTypes...` 中對應的型別 `Vi` 是 std::decay<Ti>::type,除非應用 std::decay 導致 std::reference_wrapper<X> 對於某個型別 `X`,在這種情況下推匯出的型別是 `X&`。
目錄 |
[編輯] 引數
args | - | 用於構造 tuple 的零個或多個引數 |
[編輯] 返回值
一個 std::tuple 物件,包含給定值,其建立方式如同 std::tuple<VTypes...>(std::forward<Types>(t)...).
[編輯] 可能的實現
template <class T> struct unwrap_refwrapper { using type = T; }; template <class T> struct unwrap_refwrapper<std::reference_wrapper<T>> { using type = T&; }; template <class T> using unwrap_decay_t = typename unwrap_refwrapper<typename std::decay<T>::type>::type; // or use std::unwrap_ref_decay_t (since C++20) template <class... Types> constexpr // since C++14 std::tuple<unwrap_decay_t<Types>...> make_tuple(Types&&... args) { return std::tuple<unwrap_decay_t<Types>...>(std::forward<Types>(args)...); } |
[編輯] 示例
執行此程式碼
#include <iostream> #include <tuple> #include <functional> std::tuple<int, int> f() // this function returns multiple values { int x = 5; return std::make_tuple(x, 7); // return {x,7}; in C++17 } int main() { // heterogeneous tuple construction int n = 1; auto t = std::make_tuple(10, "Test", 3.14, std::ref(n), n); n = 7; std::cout << "The value of t is (" << std::get<0>(t) << ", " << std::get<1>(t) << ", " << std::get<2>(t) << ", " << std::get<3>(t) << ", " << std::get<4>(t) << ")\n"; // function returning multiple values int a, b; std::tie(a, b) = f(); std::cout << a << ' ' << b << '\n'; }
輸出
The value of t is (10, Test, 3.14, 7, 1) 5 7
[編輯] 另請參閱
(C++11) |
建立左值引用 tuple 或將 tuple 解包為單獨的物件 (函式模板) |
(C++11) |
建立一個轉發引用的 tuple (函式模板) |
(C++11) |
透過連線任意數量的 tuple 建立一個 tuple (函式模板) |
(C++17) |
使用引數元組呼叫函式 (函式模板) |