我想專門運營商< <但這個代碼不編譯;可以專門運營商<<?
template<>
std::ostream& operator<< <my_type>(std::ostream& strm, my_type obj);
我想專門運營商< <但這個代碼不編譯;可以專門運營商<<?
template<>
std::ostream& operator<< <my_type>(std::ostream& strm, my_type obj);
要專門化模板,首先必須聲明一個模板。
如果是免費的operator<<
,則不需要模板;你可以重載它爲您my_type
類:
std::ostream& operator<<(std::ostream& strm, my_type obj);
如果你的對象是不是在大小瑣碎,你可能要考慮通過一個const引用傳遞,這樣你流呢,你不要每次複製:
std::ostream& operator<<(std::ostream& strm, const my_type& obj);
(從技術上可以明確專門的operator<<
,但我不認爲這是你想要或需要的東西。爲了能夠使用模板操作< <與平時< <語法。你需要製作模板專業化可從一個參數類型中推導出來。
E.g.
// template op <<
template< class T >
std::ostream& operator<<(std::ostream&, const MyTemplClass<T>&);
// specialization of above
template<>
std::ostream& operator<< <int>(std::ostream&, const MyTemplClass<int>&);
)
Charles請閱讀我對GMan的回答所寫的評論 – 2010-07-19 21:02:35
@Davit Siradeghyan:如果你有一個模板,它是所有*類型的catch不用說,這幾乎總是一個壞主意),那麼你可以專門化它,但是對於你的特定類型來說,重載它仍然更簡單,重載解析會選擇一個非模板函數在函數模板上的精確匹配 – 2010-07-19 21:12:05
與查爾斯一起,擁有一個完全通用的插入操作符似乎非常危險。 – GManNickG 2010-07-19 21:15:53
爲什麼不只是超負荷?
// no template <>
std::ostream& operator<<(std::ostream& strm, my_type obj);
當存在一個模板到專攻你只專注。
您的參數應該可能是const my_type&
,以避免不必要的副本。
是的,我知道重載,我需要重載operator <<爲一組類型,想象在操作符體內部,我正在檢查某些T1,T2或t3的類型,爲它們做一件事,爲所有其他類型做另一件事 – 2010-07-19 21:01:24
@Davit:如何而不是'想象',你張貼在他的問題更大的圖片? :)我們得到的信息越多,答案就越好。 (換句話說:發佈問題,而不是步) – GManNickG 2010-07-19 21:02:35
這是我的代碼 模板
爲什麼模板? – kennytm 2010-07-19 20:58:24