我有一个问题。在C ++中,我可以重载operator<<
,这样就可以打印给定大小的数组,而不需要类吗?
我设法打印了一个数组,但前提是要使该数组成为类的成员。
答案 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;
}
但是,我告诫不要过度使用它;其他使用您的代码的程序员可能不会期望这样做,并且不存在其他许多没有此类重载的非类类型(请考虑所有整数,char
类型,{{1} }和指针在流式传输时已经可以“执行某些操作”。
完整的演示代码,以供后代使用:
bool
答案 1 :(得分:1)
另一种方法是使用std::copy
和std::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