2016-06-01 107 views
9

如何編寫模板或constexpr代碼,以使match只有在Ts包含A的實例時才爲true?將模板參數與模板類型匹配

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

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

回答

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>...>; 
}; 

std::disjunction在C++ 11的實現見cppreference

+2

感謝您介紹std :: disjunction :) – Arunmu

相關問題