如何为静态成员编写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的等价物)的一部分? 自c++ 17以来,它们是<type_traits>
的一部分,名称为std::void_t
。用它可以检查特定的类类型是否有成员变量和/或函数。
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++ 中类实现中的"invalid use of non-static data member"?
- 当覆盖存在时调用基本虚拟"binded to object"函数
- 收到错误"invalid use of non-static data member 'stu::n' "
- Centos7 g++ "to_string is not in a member of std"
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- C++将派生类转换为基类时'object slicing'期间发生的情况
- C++复制函数重载导致"must be a nonstatic member function"错误
- C++ "Invalid use of 'this' in non-member function" ,
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 如何理解 C++17 标准参考中的 [intro.object]/3? N4659 的
- C++线程"Call to non-static member function without an object argument"
- 当两个成员位于同一类中时出错"a nonstatic member reference must be relative to a specific object"
- 如何解决访问不同功能的"nonstatic member reference must be relative to a specific object"
- 有 vector<object>;返回 vector<object.member> 而不复制
- "Cannot call member function ... without object"在未评估的上下文中 - GCC 错误?
- 为什么一个文件中没有错误,另一个文件中没有错误 - "Non Static Member Reference mush be relative to specific object"
- "error : a nonstatic member reference must be relative to a specific object"是什么意思?
- C++ "Error: a nonstatic member reference must be relative to a specific object"
- std::find Object by Member
- C++11 模板错误消息:"cannot call member function without object"