将元组转换为对
Convert tuple to pair
有教学任务:写模板函数,里面有任意std::tuple
和2个索引,returnsstd::pair
,包含给定std::tuple
的元素和相应的索引。
示例:
auto t = std::make_tuple(0, 3.5, "Hello");
std::pair<double, char const *> p = to_pair<1,2>(t);
// p contains 3.5 and "Hello"
写成这样:
template<int I, int J>
auto to_pair(std::tuple t) -> decltype(std::make_pair(std::get<I>(t), std::get<J>(t))) {
return std::make_pair(std::get<I>(t), std::get<J>(t));
}
但是出现错误:
r: missing template arguments before ‘t’
auto to_pair(std::tuple t) -> decltype(std::make_pair(get<I>t, get<J>t))
^
我做错了什么,这里的正确语法是什么?
std::tuple
是模板 class,所以没有 std::tuple
,只有 std::tuple<T, ...>
。在你的例子中,t
的类型是 std::tuple<int, double, char const *>
.
此外,您调用 std::get
时没有参数(缺少大括号)。
你快完成了,函数应该是这样的:
template<int I, int J, class... T>
auto to_pair(std::tuple<T...> t)
-> decltype(std::make_pair(std::get<I>(t), std::get<J>(t))) {
return std::make_pair(std::get<I>(t), std::get<J>(t));
}
有教学任务:写模板函数,里面有任意std::tuple
和2个索引,returnsstd::pair
,包含给定std::tuple
的元素和相应的索引。
示例:
auto t = std::make_tuple(0, 3.5, "Hello");
std::pair<double, char const *> p = to_pair<1,2>(t);
// p contains 3.5 and "Hello"
写成这样:
template<int I, int J>
auto to_pair(std::tuple t) -> decltype(std::make_pair(std::get<I>(t), std::get<J>(t))) {
return std::make_pair(std::get<I>(t), std::get<J>(t));
}
但是出现错误:
r: missing template arguments before ‘t’
auto to_pair(std::tuple t) -> decltype(std::make_pair(get<I>t, get<J>t))
^
我做错了什么,这里的正确语法是什么?
std::tuple
是模板 class,所以没有 std::tuple
,只有 std::tuple<T, ...>
。在你的例子中,t
的类型是 std::tuple<int, double, char const *>
.
此外,您调用 std::get
时没有参数(缺少大括号)。
你快完成了,函数应该是这样的:
template<int I, int J, class... T>
auto to_pair(std::tuple<T...> t)
-> decltype(std::make_pair(std::get<I>(t), std::get<J>(t))) {
return std::make_pair(std::get<I>(t), std::get<J>(t));
}