pointer_traits — std::pointer_traits

pointer_traits — std::pointer_traits

std::pointer_traits는 포인터류 타입(포인터, 스마트 포인터 등)의 공통 속성을 제공하는 템플릿 특성(trait) 구조체예요. <memory> 헤더에 제공돼요.

포인터형 타입에 대해 pointer, element_type, difference_type 같은 타입 멤버와, 포인터를 재구성하는 rebind·pointer_to를 일관된 방식으로 제공해요. 제네릭 코드에서 "커스텀 포인터 타입"을 다룰 때 표준 포인터와 똑같이 취급할 수 있게 해줘요.

출처: cppreference

본문

std::pointer_traits는 포인터류 타입의 특성을 제공하는 템플릿 구조체예요.

template<class Ptr> struct pointer_traits;

template<class T> struct pointer_traits<T*>;

기본 템플릿은 자체 pointer, element_type, difference_type 멤버를 가진 Ptr 타입을 가정해요. T* 특수화는 원시 포인터에 대해 다음을 제공해요.

  • pointer = T*
  • element_type = T
  • difference_type = std::ptrdiff_t
  • rebind<U> = U*
  • pointer_to(r) = std::addressof(r)

제네릭 코드에서 원시 포인터든 커스텀 팬시 포인터든 pointer_traits<Ptr>을 통해 일관되게 속성에 접근할 수 있어요. 예를 들어 std::allocator_traits 같은 곳이 내부적으로 이 특성을 활용해요.

같이 보기

  • std::allocator_traits
  • std::iterator_traits

더 알아보기 (Learn more)

cppreference