std::array 的重载插入运算符
Overloading insertion operator for std::array
我正在尝试重载插入 (<<
) 运算符以输出 std::array
的元素。以下会产生编译错误:
// overload operator<< to display array objects of any type T and size N
template<typename T, int N>
std::ostream &operator<<(std::ostream &Output, const std::array<T,N> &Arr) {
for (const auto &Element: Arr)
Output << Element << " ";
return Output;
}
但下面的工作正常(如果我将它应用于一个数组,比方说,5 个元素):
// overload operator<< to display array objects of any type T and size 5
template<typename T>
std::ostream &operator<<(std::ostream &Output, const std::array<T,5> &Arr) {
for (const auto &Element: Arr)
Output << Element << " ";
return Output;
}
我知道数组需要在编译时知道它们的大小 N
,但是模板不提供吗?
当我尝试以下操作时发生错误:
std::array<int,5> MyArr {1, 2, 3, 4, 5};
std::cout << "MyArr = " << MyArr;
std::array
的第二个模板参数是 size_t
,而不是 int
。
此外,return output;
需要 return Output;
,因为 C++ 是 case-sensitive。
// overload operator<< to display array objects of any type T and size N
template<typename T, size_t N>
std::ostream &operator<<(std::ostream &Output, const std::array<T,N> &Arr) {
for (const auto &Element: Arr)
Output << Element << " ";
return Output;
}
我正在尝试重载插入 (<<
) 运算符以输出 std::array
的元素。以下会产生编译错误:
// overload operator<< to display array objects of any type T and size N
template<typename T, int N>
std::ostream &operator<<(std::ostream &Output, const std::array<T,N> &Arr) {
for (const auto &Element: Arr)
Output << Element << " ";
return Output;
}
但下面的工作正常(如果我将它应用于一个数组,比方说,5 个元素):
// overload operator<< to display array objects of any type T and size 5
template<typename T>
std::ostream &operator<<(std::ostream &Output, const std::array<T,5> &Arr) {
for (const auto &Element: Arr)
Output << Element << " ";
return Output;
}
我知道数组需要在编译时知道它们的大小 N
,但是模板不提供吗?
当我尝试以下操作时发生错误:
std::array<int,5> MyArr {1, 2, 3, 4, 5};
std::cout << "MyArr = " << MyArr;
std::array
的第二个模板参数是 size_t
,而不是 int
。
此外,return output;
需要 return Output;
,因为 C++ 是 case-sensitive。
// overload operator<< to display array objects of any type T and size N
template<typename T, size_t N>
std::ostream &operator<<(std::ostream &Output, const std::array<T,N> &Arr) {
for (const auto &Element: Arr)
Output << Element << " ";
return Output;
}