比较不同大小的元组

时间:2015-08-14 11:34:51

标签: c++ c++11 tuples

为什么不能像这样比较两个不同大小的元组:

#include <tuple>
int main() {
  std::tuple<int, int> t1(1, 2);
  std::tuple<int> t2(1);
  if(std::tuple_size<decltype(t1)>::value == std::tuple_size<decltype(t2)>::value)
    return (t1 == t2);
  else
    return 0;
}

我知道t1==t2是不可能的。但在这个例子中它不会被执行。是否有可能比较不同大小的元组?

2 个答案:

答案 0 :(得分:1)

您可能会写几个重载:

template<typename ...Ts>
bool is_equal(const std::tuple<Ts...>& lhs, const std::tuple<Ts...>& rhs)
{
    return lhs == rhs;
}

template<typename ...Ts, typename... Us>
bool is_equal(const std::tuple<Ts...>&, const std::tuple<Us...>&)
{
    return false;
}

Live example

答案 1 :(得分:-1)

您的尺寸不匹配问题。阅读本文,也许它可以帮到你。 Implementing comparison operators via 'tuple' and 'tie', a good idea?