C에서는 클래스를 다른 클래스의 친구로 정의하여 캡슐화에 관계없이 비공개 멤버에게 액세스 권한을 부여하는 것이 가능합니다. . 그러나 클래스 템플릿을 다룰 때는 기본 친구 관계를 이해하는 것이 중요합니다.
예제 코드를 고려하세요.
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: ... };
이 코드는 트리 요소를 나타내는 클래스 BE와 트리 요소를 나타내는 클래스 BT를 정의합니다. 이진 트리. 처음에는 친구 클래스를 다음과 같이 선언하려고 시도했습니다.
template<class T> friend class BT;
그러나 이 접근 방식은 실패했습니다. 이유를 이해하려면 템플릿 매개변수가 서로를 섀도잉할 수 없다는 점을 인식하는 것이 중요합니다. 중첩된 템플릿에서는 각 수준에 고유한 템플릿 매개변수 이름이 있어야 합니다.
반대로 다음 선언을 고려하세요.
template<class T> class BE { template<class U> friend class BT<U>; };
이는 BT의 템플릿 인수에 관계없이 BT가 BE의 친구임을 의미합니다. BT의 모든 인스턴스는 저장하는 유형에 관계없이 BE의 친구가 됩니다.
또는 다음 선언이 사용되는 경우:
template<class T> class BE { friend class BT<T>; };
이는 BT가 단지 BT의 템플릿 인수가 BE의 템플릿 인수와 일치할 때 BE의 친구입니다. 이 경우, 예를 들어 BT
이진 트리 예제의 경우 친구 클래스를 친구 클래스 BT
위 내용은 C에서 클래스 템플릿을 어떻게 친구로 선언할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!