◐ Shell
clean mode source ↗

std::is_member_function_pointer — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

template< class T > struct is_member_function_pointer;

(начиная с C++11)

std::is_member_function_pointer является UnaryTypeTrait.

Проверяет, является ли T нестатическим указателем на функцию-элемент. Предоставляет константу-элемент value, которая равна true, если T является нестатическим типом указателя на функцию-элемент. Иначе value равна false.

Поведение программы, добавляющей специализации для std::is_member_function_pointer или std::is_member_function_pointer_v (начиная с C++17) не определено.

Параметры шаблона

Шаблон вспомогательной переменной

<tbody> </tbody>

template< class T > inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;

(начиная с C++17)

Унаследован от std::integral_constant

Константы элементы

true, если T является типом указателя на функцию-элемент, false иначе
(public static константа-элемент)

Функции-элементы

преобразует объект в bool, возвращает value
(public функция-элемент)
возвращает value
(public функция-элемент)

Типы элементы

Тип Определение
value_type bool
type std::integral_constant<bool, value>

Возможная реализация

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

template< class T, class U>
struct is_member_function_pointer_helper<T U::*> : std::is_function<T> {};

template< class T >
struct is_member_function_pointer 
  : is_member_function_pointer_helper< typename std::remove_cv<T>::type > {};

Пример

#include <type_traits>

class A {
public:
    void member() { }
};

int main()
{
    // сбой во время компиляции, если A::member является элементом данных, а не функцией
    static_assert(std::is_member_function_pointer<decltype(&A::member)>::value,
                  "A::member не является функцией-элементом."); 
}

Смотрите также