템플릿 클래스 친구가 있는 클래스 템플릿: 역학 탐구
요소 클래스(BE)를 사용하여 이진 트리(BT) 클래스를 구성한다고 상상해 보세요. )는 다음 구조와 유사한 각 노드를 설명합니다.
template<class T> class BE { T *data; BE *l, *r; public: template<class U> friend class BT; }; template<class T> class BT { BE<T> *root; public: ... private: ... };
이 설정에는 이상한 점이 있습니다. 친구를 template
이러한 구별은 템플릿 섀도잉 개념에서 비롯됩니다. 템플릿 매개변수는 중첩된 템플릿 범위 내에서 서로 중복될 수 없습니다. 결과적으로, 중첩된 템플릿에는 다른 매개변수 이름이 필수적입니다.
다음 구성을 고려하십시오.
template<typename T> struct foo { template<typename U> friend class bar; };
여기서 bar는 자체 템플릿 인수에 관계없이 foo에 대한 친구로 선언됩니다. bar
반대로 다음 선언은 다음과 같습니다.
template<typename T> struct foo { friend class bar<T>; };
bar의 템플릿 인수가 foo의 템플릿 인수와 일치하는 경우 bar는 foo의 친구일 뿐임을 암시합니다. 막대
따라서 특정 시나리오에서는 friend class bar
위 내용은 클래스 템플릿 내의 친구 템플릿 클래스에 대해 별도의 매개 변수가 필요한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!