std::is_function 是如何实现的
how is std::is_function implemented
根据 CPP 参考,std::is_function
可以按如下方式实施。有人可以解释为什么这有效,因为它似乎不直接解决可调用对象吗?
template<class T>
struct is_function : std::integral_constant<
bool,
!std::is_const<const T>::value && !std::is_reference<T>::value
> {};
它利用了https://eel.is/c++draft/basic.type.qualifier#1
中的这句话
A function or reference type is always cv-unqualified.
因此,给定类型 T
,它会尝试生成 const T
。如果结果是 not a const-qualified 类型,则 T 必须是函数或引用类型。然后它消除引用类型,并完成。
(不要与最后有 const
的成员函数混淆:也就是说,在标准语中,“a function type with a cv-qualifier-seq”与“cv-qualified 函数不同类型")
根据 CPP 参考,std::is_function
可以按如下方式实施。有人可以解释为什么这有效,因为它似乎不直接解决可调用对象吗?
template<class T>
struct is_function : std::integral_constant<
bool,
!std::is_const<const T>::value && !std::is_reference<T>::value
> {};
它利用了https://eel.is/c++draft/basic.type.qualifier#1
中的这句话A function or reference type is always cv-unqualified.
因此,给定类型 T
,它会尝试生成 const T
。如果结果是 not a const-qualified 类型,则 T 必须是函数或引用类型。然后它消除引用类型,并完成。
(不要与最后有 const
的成员函数混淆:也就是说,在标准语中,“a function type with a cv-qualifier-seq”与“cv-qualified 函数不同类型")