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