types_is_member_pointer

types_is_member_pointer (멤버 포인터 타입 판별)

이 페이지는 C++ 표준 라이브러리의 std::is_member_pointer 타입 특성에 대해 설명해요. 이 타입 특성은 주어진 타입이 비정적 멤버 객체를 가리키는 포인터인지, 아니면 비정적 멤버 함수를 가리키는 포인터인지를 컴파일 타임에 판별해 줘요. 조건을 만족하면 valuetrue가 되고, 그 외의 모든 타입에 대해서는 false가 돼요.

출처: cppreference

본문

정의

<type_traits> 헤더에 정의됨
template < class T > struct is_member_pointer ; (C++11부터)

std::is_member_pointer는 UnaryTypeTrait예요.

만약 T가 비정적 멤버 객체에 대한 포인터이거나 비정적 멤버 함수에 대한 포인터라면, 멤버 상수 valuetrue와 같아요. 다른 모든 타입에 대해서는 valuefalse예요.

프로그램에서 std::is_member_pointer 또는 std::is_member_pointer_v에 대한 특수화를 추가하면 동작이 정의되지 않아요.

템플릿 매개변수

T - 확인할 타입

헬퍼 변수 템플릿

template < class T > constexpr bool is_member_pointer_v = is_member_pointer < T >:: value ; (C++17부터)

std::integral_constant로부터 상속됨

멤버 상수

value [static] 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 <cassert>
#include <type_traits>

static_assert(!std::is_member_pointer_v<int*>);

struct S
{
    int i{42};
    int foo() { return 0xF00; }
};
using mem_int_ptr_t = int S::*;
using mem_fun_ptr_t = int (S::*)();
static_assert(std::is_member_pointer_v<mem_int_ptr_t>);
static_assert(std::is_member_pointer_v<mem_fun_ptr_t>);

int main()
{
    S s;

    mem_int_ptr_t pm = &S::i;
    assert(s.i == s.*pm);

    mem_fun_ptr_t pmf = &S::foo;
    assert((s.*pmf)() == s.foo());
}

같이 보기

is_pointer (C++11) 타입이 포인터 타입인지 확인해요 (클래스 템플릿)
is_member_object_pointer (C++11) 타입이 비정적 멤버 객체 포인터인지 확인해요 (클래스 템플릿)
--- ---
is_member_function_pointer (C++11) 타입이 비정적 멤버 함수 포인터인지 확인해요 (클래스 템플릿)
--- ---
is_member_pointer_type (C++26) 리플렉션이 멤버 포인터 타입을 나타내는지 확인해요 (함수)
--- ---

더 알아보기 (Learn more)

cppreference