"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > `std::enable_if`는 어떻게 작동합니까? 구현 및 사용법의 미스터리를 풀고 있습니까?

`std::enable_if`는 어떻게 작동합니까? 구현 및 사용법의 미스터리를 풀고 있습니까?

2024년 11월 12일에 게시됨
검색:640

How Does `std::enable_if` Work: Unraveling the Mysteries of Its Implementation and Usage?

std::enable_if 이해: 목적 및 구현 해독

std::enable_if의 본질은 특정 상황에서 파악되지만, 복잡한 점, 특히 두 번째 인수와 템플릿 문 내의 std::enable_if에 대한 할당은 여전히 ​​수수께끼로 남아 있습니다. 작동 방식을 더 깊이 탐구하면 이러한 미스터리가 풀릴 것입니다.

std::enable_if

std::enable_if의 필수 요소는 다음과 같이 정의된 특수 템플릿입니다.

template struct enable_if {};
template struct enable_if { typedef T type; };

결정적으로 유형 별칭 typedef T 유형은 Cond가 true인 경우에만 정의됩니다.

사용법 공개

다음 선언을 고려하세요.

template
typename std::enable_if<:numeric_limits>::is_integer, void>::type foo(const T &bar) { isInt(bar); }

여기서 foo의 반환 유형은 std::enable_if<:numeric_limits>::is_integer, void>::type으로 정의됩니다. std::numeric_limits::is_integer는 부울 조건이므로 이 반환 유형은 조건이 true인 경우에만 정의됩니다.

두 번째 인수 설명

표기법:

template::value, int>::type = 0>
void foo(const T& bar) { isInt(); }

= 0은 두 번째 템플릿 매개변수를 기본값으로 사용합니다. 이렇게 하면 std::enable_if 매개변수가 기본값이 아닌 경우 두 개의 템플릿 매개변수를 요구하는 것과는 반대로 foo(1)를 사용하여 두 옵션을 모두 호출할 수 있습니다.

주목할 만한 세부 정보

  • 유형 이름을 명시적으로 입력하면 std::enable_if<:condition t>::type이 향상됩니다. 명확성.
  • C 14에서 활성화_if_t는 반환 유형에 사용해야 하는 확립된 유형으로, 이를 std::enable_if_t으로 단순화합니다.
  • 2013 이전의 Visual Studio 버전의 경우 , 반환 유형만 활성화_if를 사용할 수 있습니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3