class = void 在 C++ 中的用途?
Purpose of class = void in C++?
以下代码片段中 class = void
的用途是什么?
template< class, class = void >
struct has_type_member : false_type { };
template< class T >
struct has_type_member<T, void_t<typename T::type>> : true_type { };
template< class, class = void >
struct has_type_member : false_type { };
这是你的默认结构模板,它要求 2 个模板参数,但第二个模板参数默认设置为 void
,因此不需要显式指定此参数,有点像默认函数参数。
然后:
template< class T >
struct has_type_member<T, void_t<typename T::type>> : true_type { };
是您的 has_type_member
结构的模板特化,如果 T::type
不存在(因此语法无效),SFINAE 将排除此特化,如果它存在,它将选择否则这个专业。
第二个参数是模板特化所必需的,但我们在 "fallback" struct
中没有使用它,所以我们默认为 void
.
以下代码片段中 class = void
的用途是什么?
template< class, class = void >
struct has_type_member : false_type { };
template< class T >
struct has_type_member<T, void_t<typename T::type>> : true_type { };
template< class, class = void >
struct has_type_member : false_type { };
这是你的默认结构模板,它要求 2 个模板参数,但第二个模板参数默认设置为 void
,因此不需要显式指定此参数,有点像默认函数参数。
然后:
template< class T >
struct has_type_member<T, void_t<typename T::type>> : true_type { };
是您的 has_type_member
结构的模板特化,如果 T::type
不存在(因此语法无效),SFINAE 将排除此特化,如果它存在,它将选择否则这个专业。
第二个参数是模板特化所必需的,但我们在 "fallback" struct
中没有使用它,所以我们默认为 void
.