추가 데이터 구조를 사용하지 않고 가변 함수 또는 템플릿 함수에 전달된 모든 인수가 동일한 유형인지 어떻게 확인할 수 있습니까?
가변 인수에 대한 한 가지 유형 지정
이 문서에서는 가변 함수 또는 가변 템플릿 함수에 전달된 모든 인수가 올바른지 확인하는 방법을 탐색합니다. 배열, 벡터 등의 추가 데이터 구조를 사용하지 않고 동일한 유형의 structs.
가변 함수 및 템플릿 함수
가변 함수 및 가변 템플릿 함수를 사용하면 함수가 알 수 없는 개수의 인수를 허용할 수 있습니다. 그러나 인수에 대해 어떠한 유형 제약도 적용하지 않습니다.
유형 안전성 강화
모든 인수가 동일한 유형임을 보장하기 위해 다음을 수행할 수 있습니다. 단계:
- Variadic 템플릿으로 인수 수락: 함수 정의 또는 템플릿 함수를 사용하여 가변 템플릿 매개변수에 의한 인수를 허용합니다.
- 변환성 확인을 위해 SFINAE 사용: 함수 인터페이스에서 SFINAE(대체 실패는 오류가 아님) 기술을 사용하여 인수는 특정 유형으로 변환될 수 있습니다. 이 기술을 사용하면 유효하지 않은 인수를 조기에 거부할 수 있습니다.
- 도우미 유형 정의: 첫 번째 인수의 유형을 결정하기 위해 가변 템플릿 fst(첫 번째 유형)를 사용하여 도우미 유형을 만듭니다.
- 함수 서명에 SFINAE 적용: 함수 서명에 활성화_if를 적용하여 인수가 다음과 같은지 확인합니다. 원하는 유형으로 변환 가능. 검사에 실패하면 컴파일러에서 오류가 발생합니다.
예:
다음 코드는 이 기술을 구현하는 방법을 보여줍니다.
template<typename R, typename...> 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 유형으로 변환될 수 있는지 확인합니다. 변환할 수 없는 인수가 있으면 컴파일러에서 오류가 발생합니다.
변환-나중에 접근 방식:
또는 배열에서 다음으로 변환하는 단계를 알고 있는 경우 원하는 유형을 선택하려면 다음을 사용할 수 있습니다. 접근 방식:
template<typename ...Items> dragon_list_t make_dragon_list(Items... maidens) { std::array<Maiden, sizeof...(Items)> arr = {{ maidens ... }}; // here be dragons }
결론:
가변 템플릿 함수와 SFINAE를 활용하면 가변 인수에 유형 안전성을 적용하여 모든 인수가 동일하도록 보장할 수 있습니다. 유형. 이를 통해 추가 데이터 구조 없이 동종 데이터에 대해 작동하는 함수를 만들 수 있습니다.
위 내용은 추가 데이터 구조를 사용하지 않고 가변 함수 또는 템플릿 함수에 전달된 모든 인수가 동일한 유형인지 어떻게 확인할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?
