반환 유형과 템플릿 매개변수의 SFINAE 적용 가능성
C 프로그래밍에서 SFINAE(Substitution Failure Is Not An Error)는 템플릿 메타프로그래밍. SFINAE를 사용하면 템플릿 매개변수를 사용하여 템플릿 함수 또는 클래스에 전달될 수 있는 인수 유형에 대한 제약 조건을 지정할 수 있습니다.
귀하의 예에는 foo라는 함수에 대한 두 가지 구현이 있습니다.
template<typename T, typename = typename std::enable_if<std::is_integral<T>::value>::type> auto foo(T) -> void; template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value>::type> auto foo(T) -> void;
첫 번째 구현에서는 템플릿 매개변수에 std::enable_if 메타함수와 함께 SFINAE를 사용합니다. 이는 템플릿 함수 foo가 std::is_integral
그러나 두 번째 구현에서는 반환 시 std::enable_if와 함께 SFINAE를 사용합니다. 템플릿 함수의 유형입니다. 이 경우 foo 함수는 어떤 유형으로든 호출할 수 있지만 T가 std::is_integral
귀하의 예에서는 템플릿이 첫 번째 템플릿 매개변수에 대해 이미 인스턴스화되었는지 확인할 때 두 번째 템플릿 매개변수에 대한 기본 템플릿 인수가 고려되지 않기 때문에 첫 번째 구현이 컴파일에 실패합니다. 따라서 컴파일러는 동일한 함수 템플릿을 두 번 다시 선언하려고 시도하여 오류가 발생한다고 가정합니다.
반면에 두 번째 구현은 typename std::enable_if
위 내용은 SFINAE가 반환 유형과 템플릿 매개변수에 적용될 때 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!