8

我想知道如何编写一个type_traits类来检测两种类型是否是同一个模板类的特化。最大的问题是它应该适用于混合类型/非类型模板类,例如:

template <typename T, std::size_t N>
class MyClass {};

有可能设计出这样的东西吗?

4

1 回答 1

2

我认为您通常不能对混合了类型参数和非类型参数的任意类模板执行此操作。

您可以接近更具体的参数集,但我不知道如何处理一般情况:

#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
{ };
于 2013-04-22T14:10:17.073 回答