>  기사  >  백엔드 개발  >  과부하 해결을 기반으로 템플릿을 어떻게 전문화할 수 있습니까?

과부하 해결을 기반으로 템플릿을 어떻게 전문화할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-10 12:24:02977검색

How Can You Specialize Templates Based on Overload Resolution?

메타프로그래밍: 오버로드 해결에 따른 전문화

메타프로그래밍에서는 유형 속성을 기반으로 템플릿을 정의하는 것이 일반적입니다. 그러나 주어진 유형에 대해 특정 오버로드가 정의되었는지 여부에 따라 두 템플릿 정의 중에서 선택하려고 할 때 문제가 발생합니다.

Walter Brown은 템플릿 인수가 제공되지 않으면 void를 반환하는 유용한 유형인 void_t를 소개합니다. . 이 개념을 바탕으로 특정 유형에 대한 std::to_string 오버로드가 있는지 확인하는 유형 특성을 정의할 수 있습니다.

template<typename T, typename = void>
struct has_to_string
: std::false_type { };

template<typename T>
struct has_to_string<T, 
    void_t<decltype(std::to_string(std::declval<T>()))>>
: std::true_type { };

이 유형 특성을 사용하면 이제 다음과 같은 템플릿을 쉽게 작성할 수 있습니다. std::to_string:

template<typename T>
enable_if_t<has_to_string<T>::value, string> stringify(T t){
    return std::to_string(t);
}

template<typename T>
enable_if_t<!has_to_string<T>::value, string> stringify(T t){
    return static_cast<ostringstream&>(ostringstream() << t).str();
}
에 대한 오버로드 해결을 기반으로 전문화합니다.

위 내용은 과부하 해결을 기반으로 템플릿을 어떻게 전문화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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