- 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 |
ポインタが指す要素型。 型 Ptr がelement_type 型を持っていればそれを使用する。型Ptr が要素型T と0個以上の他のパラメータをとるクラステンプレートであればT を使用する。そうでなければ不適格となる。 |
C++11 |
difference_type |
ポインタの差を表す符号付き整数型。 型 Ptr がdifference_type 型を持っていればそれを使用し、そうでなければptrdiff_t 型を使用する。 |
C++11 |
rebind<U> |
型の再束縛。 型 Ptr がrebind<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]