類別模板的友元聲明:
當授予給定模板的所有實例的存取權的時候,在作用域中不需要存在該類別模板或函數模板的聲明。想要限制對特定實例化的友元關係時,必須在可以用於友元聲明之前聲明類別或函數。
template <class T> class test { template <class U> friend ostream& operator<< (ostream &os, const test<U> &obj); //友元的所有实例均具有访问权 ... }; class test; template <class Type> ostream& operator<< (ostream &os, const test<Type> &obj); template <class T> class test { friend ostream& operator<< <T> (ostream &os, const test<T> &obj);//友元为的T类型实例才有访问权 ... };
模板建構子:
在一個模板類別中,建構函式和模板建構子同時存在時,優先呼叫建構子。只有當確切符合模板建構函式的介面時,才呼叫模板建構函式。編譯器永遠不會把模板建構函數視為建構函數,即使客戶沒有自己定義拷貝建構函數,編譯器也會產生一個預設的拷貝建構函數。
template <class T> class test { public: test() { cout << "in my test construct" << endl;} test(const test &) { cout << "in my test copy" << endl;} template <class V> test(const test<V> &) { cout << "in my template copy" << endl;} }; int main() { test<int> t1; test<int> t2(t1); test<double> t3(t1); return 0; }
此處的 template
程式的輸出結構為:
in my test construct
in my test copy
in my template copy
_ tr
在stls、