이진 트리(BT)와 트리(BE) 내의 요소에 대한 클래스 템플릿을 정의하는 시나리오를 생각해 보세요. 이러한 클래스 간의 우정을 선언할 때 포함 클래스와 비교하여 친구 클래스에 대해 다른 템플릿 매개변수를 사용해야 하는 이유는 무엇입니까?
C에서 템플릿 매개변수는 서로 그림자를 만들 수 없습니다. 중첩된 템플릿의 컨텍스트에서 내부 템플릿의 템플릿 매개변수는 외부 템플릿의 템플릿 매개변수와 이름이 달라야 합니다.
예를 들어 다음 코드에서는
template<class T> class BE { T *data; BE *l, *r; public: template<class U> friend class BT; };
친구 클래스 BT의 템플릿 매개변수 U는 BE 클래스의 T 템플릿 매개변수와 구별하기 위해 사용됩니다. 이는 BT의 템플릿 인수에 관계없이 BT가 BE의 친구임을 지정합니다.
그러나 친구 클래스를 다음과 같이 선언하면:
template<class T> friend class BT;
이는 BT의 특정 인스턴스화가 다음과 같다는 것을 의미합니다. BE의 특정 인스턴스화에 대한 친구입니다. 보다 구체적인 우정을 지정하려면 다음 구문을 사용할 수 있습니다.
template<typename T> struct foo { friend class bar<T>; };
이는 bar의 템플릿 인수가 foo의 템플릿 인수와 일치하는 경우에만 bar가 foo의 친구임을 나타냅니다. 귀하의 경우 친구 클래스 bar
위 내용은 중첩 템플릿의 Friend 클래스에 대해 다른 템플릿 매개 변수를 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!