有许多方法可以实现一个has_type<T>模板,推断出是否T有一个嵌套类或者命名为typedef type.即
namespace detail {
template<typename> struct tovoid { typedef void type; };
}
template<typename T, typename = void> struct has_type
: std::false_type { };
// this one will only be selected if C::type is valid
template<typename C> struct has_type<C, typename detail::tovoid<typename C::type>::type>
: std::true_type { };
Run Code Online (Sandbox Code Playgroud)
要么
template <typename C> char test_for_type(...) { return '0'; }
template <typename C> double test_for_type(typename C::type const *) { return 0.0; }
template <typename T> struct has_type
{ …Run Code Online (Sandbox Code Playgroud)