从函数返回三个值

时间:2015-11-20 18:22:15

标签: c++ tuples stdtuple

嗨,我想实现元组。 让我知道这有什么问题,以及如何正确实现它。我想从一个函数返回三个值,其中第一个值是整数,最后一个值是一个数组。

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因为第三个也是一个错误

3 个答案:

答案 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)

您似乎尝试使用unpairstd::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(){}