如何使用模板重载流插入运算符?
我正在尝试重载流插入运算符,以便可以将 std::vector 打印到 std::cout,但我遇到语法问题。
这就是我尝试过的:
template<typename T> std::ostream & operator<<(std::ostream &os, std::vector<T> &v)
{
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(os, ', '));
return os;
};
我想像这样使用它:
std::vector<float> v(3, 1.f);
std::cout << v;
这种运算符重载的正确语法是什么?
I am trying to overload the stream insertion operator so can I print std::vector to std::cout, but I'm having problem with syntax.
This is what I tried:
template<typename T> std::ostream & operator<<(std::ostream &os, std::vector<T> &v)
{
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(os, ', '));
return os;
};
And I wanted to use it like this:
std::vector<float> v(3, 1.f);
std::cout << v;
What is the correct syntax for that kind of operator overloading?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
代码几乎没问题,但是:
', '
不正确:使用", "
const std::vector; &v
;
:)郑重声明,
', '
是一个 int 类型的多字符常量 因此编译器会抱怨没有重载code>std::ostream_iterator
构造函数与参数列表'(std::ostream, int)'
匹配。The code is almost fine, however :
', '
is incorrect : use", "
const std::vector<T> &v
;
after the function close brace :)For the record,
', '
is a multi-character constant of typeint
so the compiler complains that no overload ofstd::ostream_iterator
constructor matches the argument list'(std::ostream, int)'
.