Skip to content

Latest commit

 

History

History
84 lines (62 loc) · 3.37 KB

pointer_traits.md

File metadata and controls

84 lines (62 loc) · 3.37 KB

pointer_traits

  • memory[meta header]
  • std[meta namespace]
  • class template[meta id-type]
  • cpp11[meta cpp]
namespace std {
  template <class Ptr>
  struct pointer_traits;

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

概要

pointer_traitsは、ポインタと見なせる型の情報に統一的にアクセスするためのクラスである。スマートポインタもポインタと見なせる。

静的メンバ関数

名前 説明 対応バージョン
pointer_to 変数へのポインタを取得する C++11

メンバ型

名前 説明 対応バージョン
pointer ポインタと見なせる型 Ptr C++11
element_type ポインタが指す要素型。
Ptrelement_type型を持っていればそれを使用する。型Ptrが要素型Tと0個以上の他のパラメータをとるクラステンプレートであればTを使用する。そうでなければ不適格となる。
C++11
difference_type ポインタの差を表す符号付き整数型。
Ptrdifference_type型を持っていればそれを使用し、そうでなければptrdiff_t型を使用する。
C++11
rebind<U> 型の再束縛。
Ptrrebind<U>を持っていればそれを使用する。型Ptrが型Tと0個以上の他のパラメータをとるクラステンプレートであれば、型Uで再束縛したPtr型を使用する。どちらもなければ、rebind<U>のインスタンス化は不適格となる。
C++11

メンバ型(ポインタに対する特殊化)

名前 説明 対応バージョン
pointer T* C++11
element_type T C++11
difference_type ptrdiff_t C++11
rebind<U> U* C++11

#include <memory>
#include <type_traits>

int main()
{
  // スマートポインタの要素型を取得する
  using smart_ptr_element = std::pointer_traits<std::shared_ptr<int>>::element_type;
  static_assert(std::is_same<smart_ptr_element, int>::value, "element type is int");

  // ポインタの要素型を取得する
  using ptr_element = std::pointer_traits<int*>::element_type;
  static_assert(std::is_same<ptr_element, int>::value, "element type is int");
}
  • std::pointer_traits[color ff0000]

出力

バージョン

言語

  • C++11

処理系

  • GCC: 4.7.3 [mark verified]
  • Clang: 3.0 [mark verified]
  • ICC: ?
  • Visual C++: 2012 [mark verified], 2013 [mark verified]

参照