템플릿 매개변수:
<code class="cpp">template<typename T> struct Check1 { template<typename U = T> U read(typename std::enable_if< // Option 1: As function parameter std::is_same<U, int>::value >::type* = 0) { return 42; } };</code>
반환 유형:
<code class="cpp">template<typename T> struct Check2 { template<typename U = T, typename std::enable_if< // Option 2: As template parameter std::is_same<U, int>::value, int >::type = 0> U read() { return 42; } };</code>권장 접근 방식: 템플릿에 배치 매개변수
최적의 솔루션은 템플릿 매개변수에 활성화_if를 배치하는 것입니다. 이 접근 방식은 여러 가지 장점을 제공합니다.
<code class="cpp">template<typename T> struct Check3 { template<typename U = T> typename std::enable_if<std::is_same<U, int>::value, U>::type read() { // Option 3: As return type return 42; } };</code>가독성 향상:enable_if 사용법이 반환/인수 유형과 분리되어 명확성이 향상되고 복잡함이 줄어듭니다.
보편적 적용성:다른 옵션과 달리 템플릿 매개변수 배치는 생성자에 적용 가능합니다. 및 추가 인수가 없는 연산자.
반환 유형 제외:"함수 시그니처에서 std::enable_if 방지"는 주로 일반 함수 시그니처에서의 사용을 다루지만 return에는 적용됩니다. 템플릿 전문 분야의 유형입니다. 문제는 반환 유형과 함께 활성화_if를 병합할 때 가독성 문제에서 비롯됩니다.
멤버 함수와 비멤버 함수:이 원칙은 멤버 및 비멤버 함수 템플릿 모두에 적용됩니다.
위 내용은 함수 서명에서 `std::enable_if`를 피해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!