将模板参数与模板类型匹配

时间:2016-06-01 05:40:12

标签: c++ templates c++11

如果constexpr包含match的实例,我将如何编写模板或Ts代码以使A成立?

template <std::uint32_t, int, int>
struct A;

template <typename... Ts>
struct X
{
    constexpr bool match = ???;
};

1 个答案:

答案 0 :(得分:10)

写一个特质:

template<class> 
struct is_A : std::false_type {};

template<std::uint32_t X, int Y, int Z> 
struct is_A<A<X,Y,Z>> : std::true_type {};

然后使用它:

template <typename... Ts>
struct X
{
    constexpr bool match = std::disjunction_v<is_A<Ts>...>;
};

有关C ++ 11中std::disjunction的实现,请参阅cppreference