不需要类的数组的重载operator <<

时间:2019-05-13 14:37:48

标签: c++ operator-overloading operators

我有一个问题。在C ++中,我可以重载operator<<,这样就可以打印给定大小的数组,而不需要类吗? 我设法打印了一个数组,但前提是要使该数组成为类的成员。

2 个答案:

答案 0 :(得分:4)

是的,绝对可以做到。

只需继续定义该运算符的重载即可执行您想要的任何操作。不需要是类类型。

所以,像这样:

template <typename T, std::size_t N>
std::ostream& operator<<(std::ostream& os, const T (&arr)[N])
{
   for (const auto& el : arr)
      os << el << ' ';

   return os;
}

live demo

但是,我告诫不要过度使用它;其他使用您的代码的程序员可能不会期望这样做,并且不存在其他许多没有此类重载的非类类型(请考虑所有整数,char类型,{{1} }和指针在流式传输时已经可以“执行某些操作”。


完整的演示代码,以供后代使用:

bool

答案 1 :(得分:1)

另一种方法是使用std::copystd::ostream_iterator

#include <iostream>
#include <algorithm>
#include <iterator>
#include <cstddef>

template <typename T, auto N>
auto& operator<<(std::ostream& os, T(&arr)[N])
{
  std::copy(std::cbegin(arr), std::cend(arr), std::ostream_iterator<T>(os, " "));
  return os;
}

int main()
{
    int array[] = { 6, 2, 8, 9, 2};
    std::cout << array << '\n';
}

// Output: 6 2 8 9 2