> 백엔드 개발 > C++ > CRTP를 사용한 C `is_base_of` 구현은 어떻게 작동합니까?

CRTP를 사용한 C `is_base_of` 구현은 어떻게 작동합니까?

DDD
풀어 주다: 2024-11-22 05:40:15
원래의
169명이 탐색했습니다.

How Does This C   `is_base_of` Implementation Using CRTP Work?

is_base_of 특성 구현은 어떻게 작동하나요?

제공하신 코드 조각은 C에서 is_base_of 특성을 구현하여 한 클래스가 다른 클래스에서 상속되는지 확인합니다. CRTP(Curiously Recurring Template Pattern)라는 기술을 사용합니다.

작동 방식

Host는 파생 클래스를 래핑하고 해당 연산자 B*에 액세스하는 방법을 제공하는 템플릿 클래스입니다. 기능. B가 D의 기본 클래스인지 확인하려면 is_base_of::value를 호출합니다.

  1. check 함수는 두 함수를 오버로드합니다.

    • 정적 예 체크(D*, T)
    • 정적 아니오 체크(B*, int)
  2. 호스트 사용자 정의 변환 시퀀스 덕분에 D* 및 B*로 변환될 수 있습니다.
  3. B가 D의 기반인 경우 첫 번째 확인 함수는 Host D* 및 임의의 T로 변환됩니다. 변환이 성공하면 검사 함수는 예를 반환합니다(즉, D가 B에서 상속됨).
  4. B가 D의 기반이 아닌 경우 두 번째 검사 함수가 호출됩니다. Host B*로 변환되고 int 값이 지정됩니다. B*로의 변환이 성공하면 검사 함수는 no를 반환합니다(즉, B와 D는 관련이 없습니다).
  5. is_base_of::value는 검사 함수가 다음을 반환하는 경우 true로 설정됩니다. 예이고 그렇지 않으면 거짓입니다.

연산자 B*에서 const 키워드의 중요성

연산자 B*는 const여야 합니다. 그렇지 않으면 호출할 검사 함수를 선택할 때 모호해지기 때문입니다. const 키워드를 사용하면 컴파일러는 B* const&를 취하는 검사 함수를 사용한다는 것을 알고 있습니다.

첫 번째 검사 함수가 왜 더 좋은가요?

사용자를 사용하기 때문에 첫 번째 검사 함수가 더 좋습니다. -D*에서 B*로 변환하는 정의된 변환 시퀀스. 이는 B*에서 int로 변환하는 사용자 정의 변환 시퀀스를 사용하는 두 번째 검사 함수보다 더 구체적입니다.

위 내용은 CRTP를 사용한 C `is_base_of` 구현은 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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