>  기사  >  백엔드 개발  >  다양한 템플릿 인수를 사용하여 템플릿 클래스에서 친구 관계를 정의하는 방법은 무엇입니까?

다양한 템플릿 인수를 사용하여 템플릿 클래스에서 친구 관계를 정의하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-17 09:35:04719검색

How to Define Friend Relationships in Template Classes with Different Template Arguments?

템플릿 클래스 친구와 함께 클래스 템플릿 탐구

이진 트리 클래스(BT)와 해당 요소 클래스(BE)를 정의할 때, BT가 BE의 비공개 멤버에 액세스하려면 친구 관계를 설정하는 데 필요합니다. 그러나 관계를 올바르게 정의하려면 기본 메커니즘을 이해하는 것이 중요합니다.

원래 친구 관계를 템플릿로 선언하려고 했습니다. 친구 클래스 BT. 그러나 이 구문은 BE의 템플릿 매개변수와 이름 지정 충돌을 발생시킵니다. 중첩된 템플릿 내의 템플릿 매개변수에는 고유한 이름이 있어야 합니다.

대신 다음과 같은 다른 템플릿 매개변수 이름을 사용해야 합니다.

template<class T> class BE {
  template<class U> friend class BT;
};

이 선언은 템플릿에 관계없이 모든 BT 클래스를 나타냅니다. 인수는 템플릿 인수가 일치하는 모든 BE 클래스의 친구입니다.

다양한 유형의 친구를 더 명확하게 하려면 다음 예를 고려하세요. 관계:

template<typename T>
struct foo {
  template<typename U>
  friend class bar;
};

이 경우 bar는 bar의 템플릿 인수에 관계없이 foo의 친구입니다. bar의 모든 전문화는 foo의 전문화의 친구가 됩니다.

template<typename T>
struct foo {
  friend class bar<T>;
};

여기서 bar는 템플릿 인수가 foo의 인수와 일치하는 경우에만 foo의 친구입니다. 따라서 bar foo의 친구가 될 것입니다.

특정 시나리오에서는 친구 클래스 bar;; 템플릿 인수가 해당 BE 클래스와 일치하는 한 bar의 특수화를 통해 BE의 비공개 멤버에 액세스할 수 있으므로 충분합니다.

위 내용은 다양한 템플릿 인수를 사용하여 템플릿 클래스에서 친구 관계를 정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.