C 17의 템플릿 매개변수에서 Auto의 다양성 활용
C 17 템플릿 매개변수에 auto를 도입하면 여러 가지 이점을 얻을 수 있습니다. 변수 선언의 초기 역할을 넘어서는 기능. 이 기능을 사용하면 템플릿 코드의 유연성과 단순성이 향상됩니다.
Auto의 자연 확장:
알고 있듯이 템플릿 매개변수의 auto는 자동의 자연 확장을 따릅니다. 다른 맥락에서 유형을 추론합니다. auto를 지정하면 인스턴스화 시 유형 추론을 컴파일러에 위임하므로 이를 명시적으로 정의할 필요가 없습니다.
예를 들어 제공된 코드 조각에서:
auto v1 = constant<5>; auto v2 = constant<true>; auto v3 = constant<'a'>;
유형 v1, v2 및 v3은 제공된 리터럴을 기반으로 각각 int, bool 및 char로 자동 추론됩니다. 값.
가변 템플릿:
템플릿 매개변수에서 auto의 또 다른 장점은 가변 템플릿과 함께 사용할 수 있다는 점입니다. Variadic 템플릿은 가변 개수의 인수를 허용하고 해당 유형 추론을 자동으로 단순화합니다.
컴파일 시간 목록 예를 고려하세요.
template <auto ... vs> struct HeterogenousValueList {};
이 템플릿은 임의의 숫자로 인스턴스화할 수 있습니다. 각 인수의 유형은 자동으로 추론됩니다.
using MyList1 = HeterogenousValueList<42, 'X', 13u>;
반면, C 이전 버전에서는 17에서, 이질적인 값 목록에 대한 동등한 구현은 추가 템플릿에서 인수를 래핑해야 합니다.
유형 추론 간소화:
템플릿 매개변수의 자동은 유형 추론 프로세스를 단순화합니다. , 더 간단하게 만듭니다. 이는 복잡한 유형이나 가변 템플릿으로 작업할 때 특히 유용합니다.
예:
template <auto value> constexpr auto constant = value;
값 유형을 명시적으로 정의하는 대신 auto를 사용하면 컴파일러가 제공된 값에서 유형을 추론할 수 있습니다. 인스턴스화 시.
constexpr auto const IntConstant42 = constant<42>;
향상됨 유연성:
마지막으로 자동은 템플릿 매개변수에 유연성을 추가합니다. 유형을 명시적으로 지정할 필요가 없기 때문에 더 넓은 범위의 시나리오를 수용할 수 있는 보다 일반적인 템플릿 정의가 가능합니다.
예를 들어, 값 목록의 경우 자동을 사용하면 이종 및 동종 항목을 모두 생성할 수 있습니다. 별도의 템플릿이 필요 없이 목록을 만들 수 있습니다.
위 내용은 템플릿 매개변수의 C 17 'auto'는 어떻게 유형 추론을 단순화하고 유연성을 향상시킵니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!