> 백엔드 개발 > C++ > 본문

Friend 연산자 함수가 C 템플릿에서 암시적 유형 변환을 어떻게 활성화할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-11-17 04:29:03
원래의
552명이 탐색했습니다.

How Can Friend Operator Functions Enable Implicit Type Conversions in C   Templates?

친구 연산자 함수를 사용하는 템플릿의 암시적 유형 변환

템플릿에서 암시적 유형 변환을 활용하기 위해 자주 사용되는 기술은 템플릿 클래스 정의 내의 비멤버 친구 함수입니다.

C에서 템플릿 함수는 특정 유형으로 호출될 때까지 인스턴스화되지 않습니다. 오버로드 해결 중에 컴파일러는 템플릿 매개변수의 유형을 추론하고 암시적 변환을 제외하고 인수 유형과 정확하게 일치하지 않는 모든 템플릿을 제거합니다.

해결책은 템플릿 내부에 정의된 프렌드 연산자 함수를 활용하는 것입니다. 클래스 정의. 각 템플릿 인스턴스화에 대해 컴파일러는 대체 유형과 일치하는 시그니처를 사용하여 무료 비템플릿 함수를 생성합니다.

예를 들어 다음을 고려하세요.

template <typename T>
class test {
    friend test operator+(test const &, test const &) {
        return test();
    }
};
로그인 후 복사

템플릿이 int로 인스턴스화되면, 컴파일러는 비템플릿 함수를 생성합니다.

test<int> operator+(test<int> const &, test<int> const &) {
    return test<int>();
}
로그인 후 복사

인수 종속 조회를 통해 사용할 수 있는 이 함수는 해당 인수에 대해 암시적 변환을 수행합니다. 이는 템플릿 클래스 외부에서 정의되고 오버로드 해결 중에 정확한 유형 일치가 필요하지 않기 때문입니다.

따라서 test 유형의 객체에 대해 연산자를 호출하면 암시적 유형 변환이 가능해지며 표현식이 허용됩니다. 좋아요:

A<3> a(4);
A<3> b = a + 5;
A<3> c = 5 + a;
로그인 후 복사

위 내용은 Friend 연산자 함수가 C 템플릿에서 암시적 유형 변환을 어떻게 활성화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿