嗨,我想实现元组。 让我知道这有什么问题,以及如何正确实现它。我想从一个函数返回三个值,其中第一个值是整数,最后一个值是一个数组。
template <typename T1, typename T2, typename T3>
struct t_untuple
{
T1& a1;
T2& a2;
T3& a3;
explicit t_untuple(T1& a1, T2& a2, T3& a3) : a1(a1), a2(a2), a3(a3) { }
t_untuple<T1, T2, T3>& operator = (const tuple <T1, T2, T3>& p)
{
a1 = p.first;
a2 = p.second;
a3 = p.third;
return *this;
}
};
// Our functor helper (creates it)
template <typename T1, typename T2, typename T3>
t_untuple<T1, T2, T3> unpair(T1& a1, T2& a2, T3& a3)
{
return t_unpair<T1, T2, T3>(a1, a2, a3);
}
帮助我解决这个问题。
我正在符号&#39; tuple&#39; const tuple&amp ;;无法解决 p因为第三个也是一个错误
答案 0 :(得分:0)
如果您知道要返回的类型,为什么不使用简单的结构:
#div1 {
text-decoration: none;
color: white;
font-weight: bold;
display: inline-block;
border-left: 30px solid transparent;
border-bottom: 30px solid #24890d;
height: 0;
line-height: 50px;
box-sizing: border-box; /* Added this */
}
答案 1 :(得分:0)
您似乎尝试使用unpair
和std::pair
扩展代码:
t_untuple<T1, T2, T3>& operator = (const tuple <T1, T2, T3>& p)
{
a1 = p.first;
a2 = p.second;
a3 = p.third;
return *this;
}
};
但是元组的访问字段以不同的方式完成:
t_untuple<T1, T2, T3>& operator = (const std::tuple <T1, T2, T3>& p)
{
a1 = std::get<0>(p);
a2 = std::get<1>(p);
a3 = std::get<2>(p);
return *this;
}
};
您还需要在复制粘贴中将unpair
替换为untuple
:
template <typename T1, typename T2, typename T3>
t_untuple<T1, T2, T3> untuple(T1& a1, T2& a2, T3& a3)
{
return t_untuple<T1, T2, T3>(a1, a2, a3);
}
不要忘记#include <tuple>
,你必须确保你的编译器至少是c ++ 11模式
答案 2 :(得分:0)
假设数组类型是不变的。使用std :: tuple
std::tuple<int,int,std::array<std::string>> MyFunc()
这是手册页http://en.cppreference.com/w/cpp/utility/tuple
或创建具体类
struct IIA
{
int a;
int b;
std::array<std::string> arr;
}
IAA Myfunc(){}