4
從「Thinking in C++ Volume 2」中的Thinking in Depth章節看到,如果您在模板類中具有友好的功能,則需要轉發聲明該功能。我提出這個例子來測試,overlaoding輸出操作:模板和朋友
#include <iostream>
using namespace std;
/*
template<class T>
class X;
template<class T>
ostream& operator << (ostream& os, const X<T>& x);
*/
template<class T>
class X {
T t;
public:
X(T i): t(i) {}
friend ostream& operator << (ostream& os, const X<T>& x)
{
return os << x.t;
}
};
int main()
{
X<int> a(1);
cout << a;
return 0;
}
但它的工作原理沒有提前聲明,但後來我的< <外部類的定義測試:
friend ostream& operator << <>(ostream& os, const X<T>& x); (inside of the class)
template<class T>
ostream& operator << (ostream& os, const X<T>& x)
{
return os << x.t;
}
我不確定爲什麼在類中定義它不適用,是因爲你必須明確說ostream操作符函數是一個模板? (使用<>)?
對不起,我感到困惑。
C++ FAQ Lite也有這方面的一章:http://www.parashift.com/c++-faq-lite/templates.html#faq-35.16 – Cubbi 2011-05-04 21:06:59
@ Cubbi:哦,所以當我定義它時在班級裏面,沒有必要提前申報,完美的探索,謝謝:) – Kobe 2011-05-04 21:11:36