C++ 将元组转换为对

C++ 将元组转换为对,c++,c++11,tuples,std,C++,C++11,Tuples,Std,具有教育任务:编写模板函数,其中包含任意std::tuple和2个索引,并返回std::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" auto t=std::make_tuple(0,3.5,“Hell

具有教育任务:编写模板函数,其中包含任意
std::tuple
和2个索引,并返回
std::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"
auto t=std::make_tuple(0,3.5,“Hello”);
std::对p=对(t);
//p包含3.5和“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));
}
模板
自动对(std::tuple t)->decltype(std::make_对(std::get(t),std::get(t))){
返回std::make_pair(std::get(t),std::get(t));
}
但是,我得到了一个错误:

r: missing template arguments before ‘t’
auto to_pair(std::tuple t) -> decltype(std::make_pair(get<I>t, get<J>t))
                        ^
r:t之前缺少模板参数
自动生成对(std::tuple t)->decltype(std::生成对(gett,gett))
^

我做错了什么?这里什么是正确的语法?

std::tuple
是一个模板类,所以没有
std::tuple
,只有
std::tuple
。在您的例子中,
t
的类型是
std::tuple

另外,您正在调用没有参数的
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 t)
->decltype(std::make_pair(std::get(t),std::get(t))){
返回std::make_pair(std::get(t),std::get(t));
}
std::tuple
-非常简单,谢谢,这很有效!