클래스 템플릿 전문화를 확인할 수 있나요?
소프트웨어 개발 시 클래스 템플릿으로 인해 특정 클래스가 전문화되었는지 확인해야 하는 경우가 많습니다. . 다음 시나리오를 고려하십시오.
문제:
template <class T> struct A {};
와 같은 클래스 템플릿이 주어지면 CompareT가 A<>의 인스턴스인지 확인하는 것이 가능합니까? ; 모든 유형에 대해 *? 예를 들어 아래 코드에서는
template<class CompareT> void compare(){ // is this A ? cout << is_same< A<*> , CompareT >::value; // A<> ???? } int main(){ compare< A<int> >(); }</p> <p>이 사용 사례에서는 A<int> A<>와 정렬되어야 하며 결과적으로 1이 출력됩니다.</p> <p><strong>해결책:</strong></p> <p>아래 코드를 사용하면 클래스가 A<>의 특수 버전인지 확인할 수 있습니다. 템플릿:</p> <pre class="brush:php;toolbar:false">template <class T, template <class...> class Template> struct is_specialization : std::false_type {}; template <template <class...> class Template, class... Args> struct is_specialization<Template<Args...>, Template> : std::true_type {}; static_assert(is_specialization<std::vector<int>, std::vector>{}, ""); static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
is_specialization을 호출하면 클래스가 템플릿 전문화인지 식별할 수 있어 코드 구조와 동작을 더 세밀하게 제어할 수 있습니다.
위 내용은 클래스가 클래스 템플릿의 전문화인지 확인할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!