我在幾個地方見過這個,並且確認我並不瘋狂,我looked for other examples。顯然這也可以用於其他口味,例如operator+ <>
。C++中的運算符<< <>是什麼?
但是,我在任何地方都沒有看到任何提及它的內容,所以我想我會問。
這不是在聲明函數名後,谷歌operator<< <>(
:-)
我在幾個地方見過這個,並且確認我並不瘋狂,我looked for other examples。顯然這也可以用於其他口味,例如operator+ <>
。C++中的運算符<< <>是什麼?
但是,我在任何地方都沒有看到任何提及它的內容,所以我想我會問。
這不是在聲明函數名後,谷歌operator<< <>(
:-)
<>
(包括運營商,像operator<<
)最容易的事情表明,它是一個函數模板特殊化。例如,對於一個普通的函數模板:
template <typename T>
void f(T x) { }
template<>
void f<>(int x) { } // specialization for T = int
(注意,尖括號可能在他們列出的模板參數,取決於函數模板是如何專業)
<>
也可以後使用調用函數名時的功能,顯式調用函數模板時有那些通常在重載更好的匹配非模板函數:
template <typename T>
void g(T x) { } // (1)
void g(int x) { } // (2)
g(42); // calls (2)
g<>(42); // calls (1)
所以,operator<< <>
不是運營商。
James,沒有函數模板部分特化,所以對於函數模板,這些尖括號總是空的。最後一句話可能會讓那些在說「功能模板」時會說「模板函數」並可能從更全面的解釋中受益的人感到困惑。無論如何,你的答案會得到一個+1,如果可以的話,我會給它一個+10,因爲它教會了我一些新的東西:我不知道可以通過這種方式顯式地選擇函數模板。 – sbi 2010-06-10 06:46:58
@sbi:「template」關鍵字後面的尖括號始終爲空。功能模板名稱後面的尖括號可能不是。例如,在我給出的第一個例子中,可以明確指出'int'(即,'template <> void f
對於尖括號,你當然是對的。對不起,這個brainfart。 – sbi 2010-06-10 13:59:38
有時候這很有幫助:http://www.google.com/codesearch – Cam 2010-06-10 01:04:32
pssstt,incrediman!看看我鏈接到什麼... – 2010-06-10 01:12:11
是的,這就像搜索[trigraph]一樣簡單(http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C):-) – 2010-06-10 01:17:04