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가 포인터 타입이라면 typeT가 가리키는 타입이 되고, T가 포인터가 아니라면 typeT와 같아요.

프로그램에서 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) 반영된 타입에서 포인터를 제거해요 (함수)

더 알아보기 (Learn more)

cppreference