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.