Да, конечно, вы можете сделать это.
Просто продолжайте и определите перегрузку этого оператора, чтобы он брал все, что вы хотите. Это не обязательно должен быть тип класса.
Итак, как-то так:
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
типы, bool
и указатели уже "сделай что-нибудь", когда потоком).
Полный демонстрационный код для потомков:
#include <iostream>
#include <cstddef>
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;
}
int main()
{
int array[] = {6,2,8,9,2};
std::cout << array << '\n';
}
// Output: 6 2 8 9 2