> 백엔드 개발 > C++ > 본문

SFINAE와 결합된 C++ 함수 템플릿(유형 파생이 유효하지 않음)?

WBOY
풀어 주다: 2024-04-15 11:39:01
원래의
902명이 탐색했습니다.

함수 템플릿 일반 함수를 생성하고 템플릿 매개변수 유형에 따라 함수 동작을 조정하기 위해 SFINAE와 함께 사용됩니다. SFINAE를 사용하면 템플릿 매개변수 유형 추론 실패 여부에 따라 기능 가용성을 제어할 수 있습니다. 함수 템플릿을 함께 사용하면 정수 유형과 정수가 아닌 유형을 구별하고 부울 유형을 제외하는 등 유형 제약 조건에 따라 동작을 구체화하여 유연하고 유형이 안전한 코드를 만들 수 있습니다.

C++ 函数模板与 SFINAE(类型推导失败有效)的结合使用?

SFINAE와 함께 C++ 함수 템플릿 사용

소개

C++ 함수 템플릿을 사용하면 다양한 유형에서 작동하는 일반 함수를 만들 수 있습니다. 그러나 어떤 경우에는 템플릿 매개변수 유형에 따라 함수 동작을 개선하고 싶을 수도 있습니다. SFINAE(Type Deduction Failed Efficient)가 여기에 해당됩니다.

SFINAE

SFINAE는 템플릿 매개변수 유형의 유무에 따라 함수의 가용성을 결정할 수 있는 기술입니다. 템플릿 인수를 추론할 수 없는 경우 컴파일러는 함수 가용성을 제어하는 ​​데 사용할 수 있는 파생 실패를 보고합니다.

C++ 함수 템플릿과 SFINAE의 결합

SFINAE를 사용하여 함수 템플릿의 기능을 확장할 수 있습니다. 예를 살펴보겠습니다.

template <typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type func(T x) {
  // Integral type-specific implementation
}

template <typename T>
typename std::enable_if<!std::is_integral<T>::value, void>::type func(T x) {
  // Non-integral type-specific implementation
}
로그인 후 복사

이 예에서는 func 함수 템플릿을 만들고 템플릿 매개변수 T의 유형에 따라 다양한 함수 서명을 선택합니다. std::enable_if를 사용하여 특정 유형 제약 조건이 충족되는 경우에만 사용할 수 있는 두 개의 중첩 함수를 만듭니다. 정수 유형의 경우 첫 번째 함수가 호출되고, 정수가 아닌 유형의 경우 두 번째 함수가 호출됩니다. func,根据模板参数 T 的类型选择不同的函数签名。使用 std::enable_if,我们创建两个嵌套函数,它们仅在满足特定类型约束时可用。对于整数类型,将调用第一个函数,对于非整数类型,将调用第二个函数。

实战案例

以下是一个 C++ 函数模板与 SFINAE 结合使用的实际案例:

// 实现求平方和的函数模板
template <typename T>
auto sum_of_squares(const std::vector<T>& v) {
  typename std::enable_if<!std::is_same<T, bool>::value, decltype(v[0]*v[0])>::type result = T{};

  for (const auto& elem : v)
    result += elem * elem;

  return result;
}
로그인 후 복사

在这个案例中,我们创建了一个函数模板 sum_of_squares

실용 사례

다음은 SFINAE와 함께 C++ 함수 템플릿을 사용하는 실제 사례입니다.

rrreee

이 경우 벡터를 해결할 함수 템플릿 sum_of_squares를 만들었습니다. 모든 요소의 제곱. SFINAE를 사용하면 Boolean 유형이 제곱 연산을 지원하지 않기 때문에 제외됩니다. 🎜🎜🎜결론🎜🎜🎜SFINAE와 결합된 C++ 함수 템플릿은 유연하고 유형이 안전한 일반 코드를 만드는 데 도움이 되는 강력한 도구를 제공합니다. 템플릿 매개변수 유형을 활용하면 유형 제약에 따라 런타임 시 함수 동작을 개선할 수 있습니다. 이를 통해 효율적이고 확장 가능한 코드를 작성할 수 있습니다. 🎜

위 내용은 SFINAE와 결합된 C++ 함수 템플릿(유형 파생이 유효하지 않음)?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿