SFINAE의 다양성 탐구
SFINAE는 "대체 실패는 오류가 아닙니다"의 약어로 템플릿 영역에서 개발자에게 힘을 실어줍니다. 메타프로그래밍. 템플릿 인스턴스화 중에 정교한 조건부 검사가 가능합니다.
SFINAE의 강력한 응용 프로그램 중 하나는 부울 조건을 확인하는 것입니다. 예를 들면:
template void div(char(*)[I % 2 == 0] = 0) {
// Triggered when I is even
}
template void div(char(*)[I % 2 == 1] = 0) {
// Triggered when I is odd
}
이 코드는 SFINAE를 사용하여 I의 균등성을 식별합니다.
SFINAE는 쉼표 연산자를 사용하여 구성된 초기화 목록의 길이를 더욱 효과적으로 검증할 수 있습니다. 다음 예를 고려하십시오.
template
struct Vector {
template
Vector(MyInitList const& i, char(*)[M 여기서 이니셜라이저 목록은 M이 N보다 작거나 같은 경우에만 허용되므로 허용 가능한 목록 길이를 보장합니다. char(*)[C] 구문은 크기가 C인 문자 배열에 대한 포인터를 나타냅니다. C가 false(이 경우 0)로 평가되면 잘못된 유형 char(*)[0]이 생성됩니다. SFINAE는 이러한 시나리오에서 템플릿을 편리하게 무시합니다.
boost::enable_if를 사용하는 대체 표현은 다음과 같습니다:
template
struct Vector {
template
Vector(MyInitList const& i,
typename enable_if_c::type* = 0) { // ... }
}
SFINAE가 제공하는 조건부 검사 기능은 실제 애플리케이션에서 매우 귀중한 것으로 입증되었습니다. 이는 개발자에게 제약 조건을 적용하고 특정 조건에 따라 템플릿 동작을 맞춤화할 수 있는 다양한 도구를 제공합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3