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

3
<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的等效物)的一部分?

1
指向静态成员的指针只是普通指针;没有区别它们的方法,也没有进行这样做的必要。 - Alan Stokes
1个回答

3
他们是C++17中名为std::void_t<type_traits>的一部分,用于检查特定类类型是否具有成员变量和/或函数。例如,要检查类类型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 {};

重新阅读您的问题,我有一种感觉这不是您要问的内容。对吗? - Shoe
也许这个可以行:..has_x_mem_fn<T, std::void_t<decltype( T::x() )>... 用于静态成员函数? - PiotrNycz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接