在查看libc ++的标题<type_traits>
时,我偶然发现了这些类模板特化:
template<typename>
struct is_function
: public false_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...)>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......)> // <-- Huh?
: public true_type { };
还有三对专业化(const
,volatile
和const volatile
变体),都是以同样的方式。
看起来两个省略号操作符组合在一起。我唯一能提到的就是cplusplus.com,它说它也可以用空格(_ArgTypes... ...
)或逗号(_ArgTypes..., ...
)写,但没有提供什么说明这意味着。
那么,这种语法意味着什么?像这样的专业化的目的是什么?