繁体   English   中英

如何为静态成员编写std :: is_member_ {object,function} _pointer?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM