클래스 템플릿의 친구 선언:
특정 템플릿의 모든 인스턴스에 대한 액세스 권한을 부여할 때 클래스 템플릿이나 함수 템플릿의 선언이 범위에 존재할 필요는 없습니다. 우정 관계를 특정 인스턴스화로 제한하려면 클래스나 함수를 친구 선언에 사용하기 전에 선언해야 합니다.
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; }
여기서 템플릿