types_is_member_pointer (멤버 포인터 타입 판별)
이 페이지는 C++ 표준 라이브러리의 std::is_member_pointer 타입 특성에 대해 설명해요. 이 타입 특성은 주어진 타입이 비정적 멤버 객체를 가리키는 포인터인지, 아니면 비정적 멤버 함수를 가리키는 포인터인지를 컴파일 타임에 판별해 줘요. 조건을 만족하면 value가 true가 되고, 그 외의 모든 타입에 대해서는 false가 돼요.
출처: cppreference
본문
정의
<type_traits> 헤더에 정의됨 |
|
|
template < class T > struct is_member_pointer ; |
|
(C++11부터) |
std::is_member_pointer는 UnaryTypeTrait예요.
만약 T가 비정적 멤버 객체에 대한 포인터이거나 비정적 멤버 함수에 대한 포인터라면, 멤버 상수 value는 true와 같아요. 다른 모든 타입에 대해서는 value가 false예요.
프로그램에서 std::is_member_pointer 또는 std::is_member_pointer_v에 대한 특수화를 추가하면 동작이 정의되지 않아요.
템플릿 매개변수
헬퍼 변수 템플릿
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