論壇上有很多關於朋友和模板的主題。我特意查這一個位置: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.16朋友和模板C++
但是關於這裏一個段落有些迷惑:
當編譯器看到好友線路中的 類定義正確的方法了障礙發生。那時它還不知道朋友功能本身就是模板;它假定他們是 非模板是這樣的:
Foo<int> operator+ (const Foo<int>& lhs, const Foo<int>& rhs)
{ ... }
std::ostream& operator<< (std::ostream& o, const Foo<int>& x)
{ ... }
我必須承認,我不知道很多關於編譯器技術。我很困惑,這裏要說的是,爲什麼這樣一個類內部的說法是不充分的理由的函數operator +是一個模板函數?:
friend Foo<T> operator+ (const Foo<T>& lhs, const Foo<T>& rhs);
它有一個模板參數T和三角支架... 我試圖去思考除了模板函數以外還有哪些其他類型。但是無法通過這個理解我的想法。
我也對編譯器做出的假設感到困惑。爲什麼它特定選擇< int>?爲什麼編譯會做出這個假設,但不是模板函數 - 這對我來說似乎更合理。
非常感謝,
陳
雖然它不是一個真正的回答你的問題,你可能會發現這個有用:http://yosefk.com/c++fqa/templates.html#fqa-35.16 –
它選擇''因爲在這個例子中,實例化在'T == int'上:'Foo lhs(1);' –
dyp
謝謝DyP。我忽視了主要。 –