Nie sądzę, że można to ogólnie zrobić dla dowolnego szablonu klasy z kombinacją parametrów typu i nietypowego.
można zbliżyć się do bardziej konkretnych zestawów parametrów, ale nie wiem dowolny sposób obsłużyć ogólnym przypadku:
#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
{ };
@rhalbersma, nie duplikat, druga kwestia chce wiedzieć, w jaki sposób powiedzieć, czy dwie specjalizacje używają tej samej definicji, tj. używają zarówno szablonu podstawowego, jak i obydwu używają tej samej specjalizacji częściowej lub obydwu używają tej samej specjalizacji jawnej. Tu nie chodzi o to, o ile wiem. –
@Vincent, czy cecha musi zadziałać, aby wykryć zastosowania szablonu _any_ klasy lub po prostu dla 'MyClass'? Nie sądzę, aby generalnie szablony klas korzystały z kombinacji parametrów typu i typu. –
@ JonathanWakely usunął komentarz, wydaje się, że nie jest w stanie wycofać głosowania bliskiego. – TemplateRex