我想創建一個函數,它接受<<
運算符可以處理的任何操作。我有一個打破的例子。如果我更改爲void my_print(T t)
,它也會失敗。編譯器錯誤是cout輸入的模板
error: no matching function for call to 'my_print(<unresolved overloaded function type>)' note: candidate is note: template<class T> void my_print(const T&)
爲什麼不能編譯器解決它,當它看到的參數t
正在投入cout
?
有沒有什麼好的方法可以解決這個問題,還是我必須手動提供附加的<<
個案例如: void my_print(ostream& (*pf)(ostream&));
編輯:我知道endl
是一個函數。那麼答案是函數類型不被接受爲模板?像我不能有[T = ostream& (*)(ostream&)]
?
[性病:: ENDL的可能重複的是未知類型的時候重載運算符<<](http://stackoverflow.com/questions/1134388/stdendl-is-of-unknown-type-when-overloading-operator) – Rubens 2013-04-22 23:54:59
這是因爲endl *不是*函數... – 2013-04-22 23:59:03
@ KerrekSB Huh? 'ostream&operator <<(ostream&(* pf)(ostream&))'是由'cout << endl'調用的。這似乎表明'endl'是一個函數,並返回一個'ostream&'。 – Nick 2013-04-23 00:03:41