# std::is_member_pointer

< cpp‎ | types

定义于头文件 `<type_traits>` |  |
template< class T > struct is_member_pointer; |  | (C++11 起)

若 `T` 为指向非静态成员对象或非静态成员函数的指针，则提供等于 true 的成员常量 `value` 。对于任何其他类型， `value` 为 false 。

添加 `is_member_pointer` 或 `is_member_pointer_v` (C++17 起) 的特化的程序行为未定义。

### 模板形参

T | - | 要检查的类型

### 辅助变量模板

template< class T > inline constexpr bool is_member_pointer_v = is_member_pointer<T>::value; |  | (C++17 起)

## 继承自 std::integral_constant

### 成员常量

value [静态] | 若 `T` 为成员指针类型则为 true ，否则为 false (公开静态成员常量)

### 成员函数

operator bool | 转换对象为 bool ，返回 `value` (公开成员函数)
operator() (C++14) | 返回 `value` (公开成员函数)

### 成员类型

类型 | 定义
`value_type` | `bool`
`type` | std::integral_constant<bool, value>

### 可能的实现

    template< class T >
    struct is_member_pointer_helper         : std::false_type {};

    template< class T, class U >
    struct is_member_pointer_helper<T U::*> : std::true_type {};

    template< class T >
    struct is_member_pointer :
        is_member_pointer_helper<typename std::remove_cv<T>::type> {};

### 示例

| 本节未完成 原因：简化

    #include <iostream>
    #include <type_traits>

    int main() {
        class cls {};
        std::cout << (std::is_member_pointer<int(cls::*)>::value
                         ? "T is member pointer"
                         : "T is not a member pointer") << '\n';
        std::cout << (std::is_member_pointer<int>::value
                         ? "T is member pointer"
                         : "T is not a member pointer") << '\n';
    }

输出：

    T is member pointer
    T is not a member pointer

### 参阅

is_pointer (C++11) | 检查类型是否为指针类型 (类模板)
is_member_object_pointer (C++11) | 检查类型是否为指向非静态成员对象的指针 (类模板)
is_member_function_pointer (C++11) | 检查类型是否为指向非静态成员函数的指针 (类模板)