types_is_pointer (포인터 타입인지 검사하는 타입 트레이트)
std::is_pointer는 주어진 타입 T가 객체나 함수를 가리키는 포인터인지 확인하는 C++ 타입 트레이트예요. 멤버 상수 value를 통해 컴파일 타임에 판별 결과를 알 수 있어요. 이 페이지에서는 is_pointer의 사용법과 예제를 살펴볼게요.
출처: cppreference
본문
<type_traits> 헤더에 정의되어 있어요.
Defined in header <type_traits> |
|
|
template < class T > struct is_pointer ; |
|
(C++11부터) |
std::is_pointer는 UnaryTypeTrait예요. T가 객체나 함수를 가리키는 포인터(멤버 포인터는 제외하고 void 포인터는 포함) 또는 그 cv-qualified 버전인지 검사해요. T가 객체/함수 포인터 타입이면 멤버 상수 value가 true가 되고, 그렇지 않으면 false예요. 프로그램에서 std::is_pointer나 std::is_pointer_v에 특수화를 추가하면 동작이 정의되지 않아요.
템플릿 매개변수
헬퍼 변수 템플릿
| Helper variable template |
|
|
template < class T > constexpr bool is_pointer_v = is_pointer < T >:: value ; |
|
(C++17부터) |
std::integral_constant로부터 상속받은 멤버
멤버 상수
| 멤버 |
설명 |
| value [static] |
T가 포인터 타입이면 true, 아니면 false (public static 멤버 상수) |
멤버 함수
| 멤버 |
설명 |
| operator bool |
객체를 bool로 변환하고 value를 반환해요 (public 멤버 함수) |
| operator() (C++14) |
value를 반환해요 (public 멤버 함수) |
멤버 타입
| 타입 |
정의 |
| value_type |
bool |
| type |
std :: integral_constant < bool, value > |
가능한 구현
template < class T > struct is_pointer : std :: false_type {}; template < class T > struct is_pointer < T *> : std :: true_type {}; template < class T > struct is_pointer < T * const > : std :: true_type {}; template < class T > struct is_pointer < T * volatile > : std :: true_type {}; template < class T > struct is_pointer < T * const volatile > : std :: true_type {};
예제
#include <type_traits>
int main()
{
struct A
{
int m;
void f() {}
};
int A::*mem_data_ptr = &A::m; // a pointer to member data
void (A::*mem_fun_ptr)() = &A::f; // a pointer to member function
static_assert(""
&& ! std::is_pointer<A>::value
&& ! std::is_pointer_v<A> // same thing as above, but in C++17!
&& ! std::is_pointer<A>() // same as above, using inherited operator bool
&& ! std::is_pointer<A>{} // ditto
&& ! std::is_pointer<A>()() // same as above, using inherited operator()
&& ! std::is_pointer<A>{}() // ditto
&& std::is_pointer_v<A*>
&& std::is_pointer_v<A const* volatile>
&& ! std::is_pointer_v<A&>
&& ! std::is_pointer_v<decltype(mem_data_ptr)>
&& ! std::is_pointer_v<decltype(mem_fun_ptr)>
&& std::is_pointer_v<void*>
&& ! std::is_pointer_v<int>
&& std::is_pointer_v<int*>
&& std::is_pointer_v<int**>
&& ! std::is_pointer_v<int[10]>
&& ! std::is_pointer_v<std::nullptr_t>
&& std::is_pointer_v<void (*)()>
);
}
같이 보기
| is_member_pointer (C++11) |
타입이 비정적 멤버 함수나 객체를 가리키는 포인터인지 검사해요 (클래스 템플릿) |
| is_member_object_pointer (C++11) |
타입이 비정적 멤버 객체 포인터인지 검사해요 (클래스 템플릿) |
| is_member_function_pointer (C++11) |
타입이 비정적 멤버 함수 포인터인지 검사해요 (클래스 템플릿) |
| is_array (C++11) |
타입이 배열 타입인지 검사해요 (클래스 템플릿) |
| is_scalar (C++11) |
타입이 스칼라 타입인지 검사해요 (클래스 템플릿) |
| is_pointer_type (C++26) |
반영된 타입이 포인터 타입인지 검사해요 (함수) |
더 알아보기 (Learn more)
cppreference