[英]How to write std::is_member_{object,function}_pointer for static members?
<type_traits>
标准头定义了元函数
template< class T >
struct is_member_object_pointer;
template< class T >
struct is_member_function_pointer;
template< class T >
struct is_member_pointer;
如果可能的话,如何为静态成员变量和函数编写一组类似的元函数? 为什么这些元函数不属于<type_traits>
(或者是boost的等价物)?
它们是std::void_t
名称下的<type_traits>
一部分,因为C ++ 17。 然后检查特定类类型是否具有成员变量和/或函数。
例如,要检查类类型Type
是否具有成员对象x
您将使用以下内容:
template<class, class = std::void_t<>>
struct has_x : std::false_type {};
template<class T>
struct has_x<T, std::void_t<decltype( std::declval<T&>().x )>> : std::true_type {};
类似地,对于成员函数x()
您将使用:
template<class, class = std::void_t<>>
struct has_x_mem_fn : std::false_type {};
template<class T>
struct has_x_mem_fn<T, std::void_t<decltype( std::declval<T&>().x() )>> : std::true_type {};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.