친구 연산자 함수를 사용하는 템플릿의 암시적 유형 변환
템플릿에서 암시적 유형 변환을 활용하기 위해 자주 사용되는 기술은 템플릿 클래스 정의 내의 비멤버 친구 함수입니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!