types_remove_pointer
types_remove_pointer (포인터 제거)
이 페이지는 C++ 표준 라이브러리의 std::remove_pointer 타입 특성에 대해 설명해요. std::remove_pointer는 컴파일 타임에 타입에서 포인터를 제거하는 데 사용하는 템플릿 구조체예요. 포인터 타입이 주어지면 그 포인터가 가리키는 타입을, 포인터가 아닌 타입이 주어지면 원래 타입을 그대로 멤버 typedef type으로 제공해요.
출처: cppreference
본문
정의
<type_traits> 헤더에 정의되어 있어요.
| 항목 | 내용 |
|---|---|
| 헤더 | <type_traits> |
| 템플릿 선언 | template < class T > struct remove_pointer ; |
| 도입 | C++11부터 |
설명
std::remove_pointer는 멤버 typedef type을 제공해요. T가 포인터 타입이라면 type은 T가 가리키는 타입이 되고, T가 포인터가 아니라면 type은 T와 같아요.
프로그램에서 std::remove_pointer에 대한 특수화를 추가하면 동작이 정의되지 않아요.
멤버 타입
| 이름 | 설명 |
|---|---|
type |
T가 가리키는 타입. T가 포인터가 아니면 T 그대로예요. |
도우미 타입
template < class T > using remove_pointer_t = typename remove_pointer < T >:: type ; (C++14부터)
가능한 구현
다음과 같이 구현할 수 있어요.
template < class T > struct remove_pointer { typedef T type ; }; template < class T > struct remove_pointer < T *> { typedef T type ; }; template < class T > struct remove_pointer < T * const > { typedef T type ; }; template < class T > struct remove_pointer < T * volatile > { typedef T type ; }; template < class T > struct remove_pointer < T * const volatile > { typedef T type ; };
예제
다음 예제는 remove_pointer_t가 다양한 포인터 타입에서 올바르게 동작하는지 확인해요.
#include <type_traits>
static_assert
(
std::is_same_v<int, int> &&
!std::is_same_v<int, int*> &&
!std::is_same_v<int, int**> &&
!std::is_same_v<int*, int**> &&
std::is_same_v<int, std::remove_pointer_t<int>> &&
std::is_same_v<int, std::remove_pointer_t<int*>> &&
!std::is_same_v<int, std::remove_pointer_t<int**>> &&
std::is_same_v<int*,std::remove_pointer_t<int**>> &&
std::is_same_v<int, std::remove_pointer_t<int* const>> &&
std::is_same_v<int, std::remove_pointer_t<int* volatile>> &&
std::is_same_v<int, std::remove_pointer_t<int* const volatile>>
);
int main() {}
같이 보기
| 이름 | 설명 |
|---|---|
is_pointer (C++11) |
타입이 포인터 타입인지 확인해요 (클래스 템플릿) |
add_pointer (C++11) |
주어진 타입에 포인터를 추가해요 (클래스 템플릿) |
remove_pointer (C++26) |
반영된 타입에서 포인터를 제거해요 (함수) |