重载 std::array << 运算符

我在尝试为 std::array 重载运算符 << 时遇到问题。对于所有其他集合,我尝试以随意的方式进行:

std::ostream& operator<<(std::ostream& os, std::array<int> const& v1)
{
    for_each(begin(v1), end(v1), [&os](int val) {os << val << " "; });
    return os;
}

但是编译器希望我添加有关数组大小的信息,这不会使它成为任何整数数组的通用解决方案。我知道如果我想为一般类型制作它,我将不得不使用模板,但现在我只想为整数数组制作它。

回答

模板不仅适用于“一般类型”。std::array在它所拥有的类型和数组的大小上都进行了模板化。因此,如果您希望将运算符应用于任何大小的 int 数组,则需要对运算符进行模板化:

template <std::size_t N>
std::ostream& operator<<(std::ostream& os, std::array<int, N> const& v1)
{
for_each(begin(v1), end(v1), [&os](int val) {os << val << " "; });
return os;
}

以上是重载 std::array &lt;&lt; 运算符的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>