>백엔드 개발 >C++ >Variadic 함수에서 유형 균일성을 적용하는 방법은 무엇입니까?

Variadic 함수에서 유형 균일성을 적용하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-10 04:30:02323검색

How to Enforce Type Uniformity in Variadic Functions?

가변 함수의 인수 유형 균일성 보장

이 시나리오에서는 가변 개수의 인수를 받아들일 수 있는 함수를 만드는 것을 목표로 합니다. 그러나 모든 인수가 동일한 유형인지 확인하십시오. 우리는 배열이나 벡터와 같은 추가 데이터 구조에 의존하지 않고 이를 달성하려고 합니다.

가변 함수

가변 함수 자체는 인수에 대한 유형 안전성을 제공하지 않습니다. 유형 통일성을 강화하려면 가변 템플릿 함수 사용을 고려하세요.

가변 템플릿 함수

가변 템플릿 함수는 다음과 같이 정의할 수 있습니다.

template<typename... Args>
return_type function_name(Args...);

이 템플릿에서 Args...는 전달될 수 있는 인수의 가변 개수를 나타냅니다. function.

유형 검사 적용

모든 인수가 동일한 유형임을 보장하기 위해 SFINAE(Substitution Failure Is Not An Error)를 사용할 수 있습니다. SFINAE를 사용하면 컴파일 중에 주어진 조건이 true인지 false인지 감지하는 템플릿을 만들 수 있습니다.

예:

template<typename R, typename... Args>
struct fst { typedef R type; };

template<typename ...Args>
typename fst<void,
  typename enable_if<
    is_convertible<Args, ToType>::value
  >::type...
>::type
f(Args...);

이 템플릿에서는 f()만 허용됩니다. ToType 유형(원하는 인수 유형을 나타냄)으로 변환할 수 있는 인수를 허용합니다. 이 구성은 ToType으로 변환할 수 없는 인수를 거부합니다.

사용 사례 솔루션

특정 사용 사례의 경우 다음을 사용할 수 있습니다.

template<typename ...Items>
dragon_list_t make_dragon_list(Items... maidens) {
    std::array<Maiden, sizeof...(Items)> arr = {{ maidens ... }};
    // here be dragons
}

이 템플릿은 가변 인수를 std::array. 그런 다음 사용 가능한 방법을 사용하여 이 배열을 Dragon_list_t 유형으로 변환할 수 있습니다.

SFINAE와의 결합

이 접근 방식을 앞서 설명한 SFINAE 기술과 결합하면 다음을 만들 수 있습니다. Maiden으로 변환할 수 없는 인수를 거부하는 템플릿입니다.

위 내용은 Variadic 함수에서 유형 균일성을 적용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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