Non penso che sia possibile farlo in generale per un modello di classe arbitrario con un mix di parametri di tipo e non di tipo.
È possibile avvicinarsi per gruppi più specifici di parametri, ma non so alcun modo per gestire il caso generale:
#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
{ };
fonte
2013-04-22 14:10:17
@rhalbersma, non un duplicato, l'altra domanda vuole sapere come indica se due specializzazioni utilizzano la stessa definizione, ovvero entrambe utilizzano il modello primario o entrambe utilizzano la stessa specializzazione parziale o entrambe utilizzano la stessa specializzazione esplicita. Questa non è la domanda qui, per quanto posso dire. –
@Vincent, il tratto deve lavorare per rilevare gli usi del modello di classe _any_, o solo per 'MyClass'? Non penso sia possibile in generale modelli di classi che utilizzano un mix di parametri di tipo e non di tipo. –
@JonathanAvendo rimosso il commento, non sembra in grado di ritirare il voto ravvicinato. – TemplateRex