2010-11-20 36 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