>백엔드 개발 >C++ >클래스는 C의 템플릿 전문화입니까?

클래스는 C의 템플릿 전문화입니까?

DDD
DDD원래의
2024-11-13 04:17:02766검색

Is a Class a Template Specialization in C  ?

클래스는 템플릿 전문화인가요?

C에서는 주어진 유형이 특정 유형의 전문화인지 확인하는 것이 유용할 수 있습니다. 클래스 템플릿. 예를 들어 다음 코드를 고려해 보세요.

template<class T>
struct A {};

template<class CompareT>
void compare() {
    // is this A?
    cout << is_same< A<*> , CompareT >::value << endl; // A<?> ????
}

위 코드가 주어지면 CompareT가 A<>인지 어떻게 확인할 수 있나요? 일부 유형의 경우 *?

해결책:

is_specialization 템플릿 메타함수를 활용하면 유형이 클래스 템플릿의 특수화인지 확인할 수 있습니다. 예는 다음과 같습니다.

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은 T와 Template라는 두 가지 인수를 사용합니다. T가 템플릿의 특수화인 경우 is_specialization std::true_type입니다. 그렇지 않으면 std::false_type입니다.

위 내용은 클래스는 C의 템플릿 전문화입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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