>백엔드 개발 >C++ >C에서 클래스 템플릿을 어떻게 친구로 선언할 수 있나요?

C에서 클래스 템플릿을 어떻게 친구로 선언할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-11-14 13:50:02238검색

How Can You Declare Class Templates as Friends in C  ?

클래스 템플릿을 친구로 선언: 심층 분석

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 BE의 친구가 되지만 BE의 친구는 아닙니다. 또는 BE.

이진 트리 예제의 경우 친구 클래스를 친구 클래스 BT로 선언합니다;; BT와 BE 사이에 원하는 관계를 제공하기에 충분합니다.

위 내용은 C에서 클래스 템플릿을 어떻게 친구로 선언할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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