作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
<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;
如果可能的话,如何为static 成员变量和函数编写一组类似的元函数?为什么这些元函数不是 <type_traits>
的一部分? (或 boost 的等价物)?
最佳答案
它们是 <type_traits>
的一部分以 std::void_t
的名义,自 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 {};
关于c++ - 如何为静态成员编写 std::is_member_{object,function}_pointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32683238/
标准头文件定义了元函数 template struct is_member_object_pointer; template struct is_member_function_pointer; te
我是一名优秀的程序员,十分优秀!