>  기사  >  백엔드 개발  >  C에서 템플릿 구조체/클래스를 어떻게 친구로 선언할 수 있나요?

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

Linda Hamilton
Linda Hamilton원래의
2024-11-07 17:40:03877검색

How Can You Declare Templated Structs/Classes as Friends in C  ?

템플릿 구조체/클래스를 친구로 선언

C 영역에서 템플릿 구조체 또는 클래스를 친구로 선언하면 구문 관련 장애물이 나타날 수 있습니다. 이를 달성하려면 다음 접근 방식을 고려하십시오.

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

private:
    // ...
};

이 구문은 성공적으로 컴파일된 것으로 보입니다. 그러나 foo의 모든 템플릿 인스턴스화는 그들이 취하는 템플릿 매개변수에 관계없이 서로 친구로 선언됩니다. 이는 의도한 사용 사례와 일치할 수도 있고 그렇지 않을 수도 있습니다.

특정 인스턴스화로만 우정을 제한해야 하는 경우 다음 구문을 사용하여 이를 달성할 수 있습니다.

template <typename T>
struct foo
{
    template <typename S>
    friend struct foo<S>;

private:
    // ...
};

안타깝게도 이 구문은 foo의 가능한 모든 인스턴스화를 포함하는 일반 선언을 허용하지 않습니다.

따라서 foo의 모든 템플릿 인스턴스화에서 우정을 구축하는 것이 목표라면 친구 클래스 foo를 사용하는 두 번째 접근 방식이 가장 가깝습니다. C 구문의 제약으로 인해 얻을 수 있습니다.

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

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