2010-11-20 35 views
2

我想重载流插入操作符,所以我可以打印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; 

什么是那种操作符重载的语法是否正确?

+1

适用于我......除了显而易见的'','''而不是'',' – Kos 2010-11-20 09:41:38

回答

2

的代码几乎是正常,但是:

  • 分隔', '是不正确的:使用", "
  • 你的函数可以(也应该)采取const引用到v:const std::vector<T> &v
  • 有一个不必要的;后功能关闭大括号:)

备案', 'int类型的multi-character constant因此编译器会抱怨std::ostream_iterator构造函数没有超载匹配参数列表'(std::ostream, int)'

+0

我对C++模板语法知识非常不安全,以至于我认为我犯了一个大错误......但它是微不足道的。非常感谢你。新鲜的眼睛看得更好。 – Bojan 2010-11-20 09:46:05

+0

只是为了说明icecrime所说的内容,单引号用于在C和C++中分隔_characters_而非_strings_ – tobyodavies 2010-11-20 09:48:32

+0

我在Visual Studio中将我的源文件保存为UTF-8,因此字符和字符串文字总是单字节。 – Bojan 2010-11-20 09:56:09