>백엔드 개발 >C++ >클래스가 클래스 템플릿의 전문화인지 확인할 수 있나요?

클래스가 클래스 템플릿의 전문화인지 확인할 수 있나요?

DDD
DDD원래의
2024-11-12 11:52:02721검색

 Can I Determine if a Class Is a Specialization of a Class Template?

클래스 템플릿 전문화를 확인할 수 있나요?

소프트웨어 개발 시 클래스 템플릿으로 인해 특정 클래스가 전문화되었는지 확인해야 하는 경우가 많습니다. . 다음 시나리오를 고려하십시오.

문제:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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