SFINAE의 유용성 이해
SFINAE(대체 실패는 오류가 아님)는 템플릿 메타 프로그래밍의 필수 개념입니다. 이론적 의미는 중요하지만 실제 적용을 이해하면 코딩 능력이 향상될 수 있습니다.
조건부 검사에 SFINAE 사용
SFINAE의 주목할만한 용도 중 하나는 부울 조건을 확인하는 것입니다. . 명시적인 if 문에 의존하는 대신 SFINAE를 사용하면 조건의 진실성을 기반으로 다양한 유형을 평가하는 템플릿 전문화를 정의할 수 있습니다.
다음 코드를 고려하세요.
template void div(char(*)[I % 2 == 0] = 0) { /* this is taken when I is even */ }
template void div(char(*)[I % 2 == 1] = 0) { /* this is taken when I is odd */ }
이 코드는 div() 함수. I가 짝수이면 I % 2 == 0이 true로 성공적으로 대체되었기 때문에 첫 번째 특수화가 선택됩니다. 반대로, I가 홀수이면 두 번째 전문화가 선택됩니다.
목록 크기 제한 확인
SFINAE는 초기화 목록의 크기를 확인하는 편리한 방법도 제공합니다. 예는 다음과 같습니다.
template
struct Vector {
template
Vector(MyInitList const& i, char(*)[M Vector 구조체는 초기화 목록 i에 최대 N개의 요소가 포함되도록 보장합니다. SFINAE를 사용하면 M > N의 유효하지 않은 경우에 대한 템플릿 전문화가 제거되어 조건이 충족되는 경우에만 유효한 유형이 됩니다.
결론
SFINAE 프로그래머가 유형 수준 계산을 수행하고 조건부 코드 결정을 내릴 수 있는 능력을 부여하는 다용도 기술입니다. 부울 조건 확인부터 이니셜라이저 목록의 유효성 확인까지 해당 애플리케이션은 고급 C 프로그래밍에서의 유용성을 보여줍니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3