C에서는 주어진 유형이 특정 클래스 템플릿의 전문화인지 확인해야 하는 경우가 많습니다. 아래 예를 고려하십시오.
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> >(); }
예를 들어 여기서 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 {};
이 메타 함수는 true를 반환합니다. T가 템플릿의 특수화이면 그렇지 않으면 false입니다. 사용법을 설명하려면:
static_assert(is_specialization<std::vector<int>, std::vector>{}, ""); static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
위 내용은 C에서 템플릿 전문화를 결정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!