检查类型是否为模板特化
Check whether a type is a template specialization or not
给定一个任意模板class/struct,就像:
template <typename T>
struct A {};
我想执行 <type_traits>
时尚检查 (我们将其命名为 is_A) 以确定是否 任意 类型是否是 A 的 特化,就像:
#include <type_traits>
template <typename T>
struct is_A: std::integral_constant<bool, /* perform the check here */ > {};
constexpr bool test0 = is_A< A<int> >::value // true
constexpr bool test1 = is_A< A<float> >::value // true
constexpr bool test2 = is_A< int >::value // false
constexpr bool test2 = is_A< float >::value // false
这怎么可能?
提前致谢
您需要专攻 A<T>
:
template <typename T>
struct is_A : std::false_type { };
template <typename T>
struct is_A<A<T>> : std::true_type { };
给定一个任意模板class/struct,就像:
template <typename T>
struct A {};
我想执行 <type_traits>
时尚检查 (我们将其命名为 is_A) 以确定是否 任意 类型是否是 A 的 特化,就像:
#include <type_traits>
template <typename T>
struct is_A: std::integral_constant<bool, /* perform the check here */ > {};
constexpr bool test0 = is_A< A<int> >::value // true
constexpr bool test1 = is_A< A<float> >::value // true
constexpr bool test2 = is_A< int >::value // false
constexpr bool test2 = is_A< float >::value // false
这怎么可能?
提前致谢
您需要专攻 A<T>
:
template <typename T>
struct is_A : std::false_type { };
template <typename T>
struct is_A<A<T>> : std::true_type { };