class的目的= C ++中的void?

时间:2017-05-17 12:47:48

标签: c++ c++11 templates c++14 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 { };

1 个答案:

答案 0 :(得分:10)

sudo su jenkins

这是你的默认结构模板,它要求2个模板参数,但第二个默认设置为template< class, class = void > struct has_type_member : false_type { }; ,所以这个参数不需要显式指定,有点像默认函数参数。

然后:

void

template< class T > struct has_type_member<T, void_t<typename T::type>> : true_type { }; 结构的模板专业化,如果has_type_member不存在(因此,语法无效),SFINAE将排除此专业化,如果确实存在,则会选择此专业化否则。

第二个参数必须用于模板特化,但我们不会在“后备”T::type中使用它,因此我们默认为struct