>  기사  >  백엔드 개발  >  템플릿 인수에서 `enable_if_t`에 대한 재정의 오류가 발생하는 이유는 무엇입니까?

템플릿 인수에서 `enable_if_t`에 대한 재정의 오류가 발생하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-19 03:45:03861검색

Why Am I Getting a Redefinition Error with `enable_if_t` in Template Arguments?

템플릿 인수의 활성화_if_t 재정의 오류

C에서는 코드를 새로운 구문. 다음 코드는 문제를 보여줍니다.

template<typename T,
         typename std::enable_if<std::is_same<int, T>::value>::type* = nullptr>
void f() { }

template<typename T,
         typename = std::enable_if_t<std::is_same<int, T>::value>>
void g() { }

GCC(5.2)로 컴파일하면 오류가 발생합니다.

"오류: '템플릿<클래스 T, 클래스> void g()' 재정의 "

오류 원인

이 오류는 두 템플릿 함수 f와 g가 동일한 템플릿 유형 void()를 가지고 있기 때문에 발생합니다. 두 번째 템플릿 인수의 기본값은 다르지만 여전히 유형은 동일합니다.

해결책

문제를 해결하려면 std::를 사용하도록 구문을 업데이트하세요. 다른 두 번째 인수 유형을 사용하는 활성화_if_t. 예:

template<typename T,
         std::enable_if_t<std::is_same<int, T>::value, int>* = nullptr>
void f() { }

template<typename T,
         std::enable_if_t<std::is_same<double, T>::value, double>* = nullptr>
void g() { }

이 수정을 통해 두 템플릿 함수가 서로 다른 템플릿 유형을 갖도록 하고 재정의 오류를 제거합니다.

위 내용은 템플릿 인수에서 `enable_if_t`에 대한 재정의 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.