type_traits
클래스를 작성하여 두 가지 유형이 동일한 템플릿 클래스의 특수화인지 여부를 감지하는 방법을 알고 싶습니다. 큰 문제는 다음과 같이 혼합 유형/비 유형 템플릿 클래스에서 작동해야한다는 것입니다.두 가지 유형이 같은 클래스 템플릿의 특수화인지 여부를 감지합니까?
template <typename T, std::size_t N>
class MyClass {};
그런 것을 디자인 할 수 있습니까?
type_traits
클래스를 작성하여 두 가지 유형이 동일한 템플릿 클래스의 특수화인지 여부를 감지하는 방법을 알고 싶습니다. 큰 문제는 다음과 같이 혼합 유형/비 유형 템플릿 클래스에서 작동해야한다는 것입니다.두 가지 유형이 같은 클래스 템플릿의 특수화인지 여부를 감지합니까?
template <typename T, std::size_t N>
class MyClass {};
그런 것을 디자인 할 수 있습니까?
유형 및 비 유형 매개 변수가 혼합 된 임의의 클래스 템플리트에 대해 일반적으로이를 수행 할 수 있다고 생각하지 않습니다.
당신은 매개 변수의보다 구체적인 세트 가까이 갈 수 있지만, 나는 일반적인 경우 처리 할 수있는 방법을 알고하지 않습니다
#include <type_traits>
template <typename T, std::size_t N>
class MyClass {};
// assume not the same
template<typename T, typename U>
struct my_trait : std::false_type
{ };
// both specializations of MyClass
template<typename T1, std::size_t N1, typename T2, std::size_t N2>
struct my_trait<MyClass<T1, N1>, MyClass<T2, N2>>
: std::true_type
{ };
// both specializations of some class template Templ<typename, std::size_t>
template<template<typename, std::size_t> class Templ, typename A1, std::size_t S1, typename A2, std::size_t S2>
struct my_trait<Templ<A1, S1>, Templ<A2, S2>>
: std::true_type
{ };
// both specializations of some class template Templ<typename...>
template<template<typename...> class Templ, typename... A1, typename... A2>
struct my_trait<Templ<A1...>, Templ<A2...>>
: std::true_type
{ };
'gettype'을'template
@rhalbersma 아닌 중복, 다른 문제는 방법을 알고 싶어 두 가지 전문화가 동일한 정의를 사용하는지 여부, 즉 기본 템플릿을 사용하거나 둘 다 동일한 부분 전문화를 사용하거나 둘 모두가 동일한 명시 적 전문화를 사용하는지 여부를 알려줍니다. 제가 말할 수있는 한 여기에 의문의 여지가 없습니다. –
@ Vincent, 특성은 _any_ 클래스 템플릿의 사용을 탐지하기 위해 작동해야합니까, 아니면 단지 'MyClass'를 위해 작동해야합니까? 타입 템플릿과 타입이 아닌 파라미터를 혼합하여 사용하는 클래스 템플릿에서는 일반적으로 가능하지 않다고 생각합니다. –
@JonathanWakely가 댓글을 삭제했으며 가까운 투표를 철회 할 수없는 것 같습니다. – TemplateRex