類模板
<memory>

std::pointer_traits

template <class Ptr> class pointer_traits;    // templatetemplate <class T> class pointer_traits<T*>;  // template specialization
Pointer traits
這是一個用於描述指標和類指標物件某些屬性的 traits 類。

標頭檔案 <memory> 同時提供了未特化的版本(對類指標物件提供預設功能),以及一個特化為指標型別的版本(T*).

類指標物件是模擬指標行為的類。該模板的未特化版本可用於任何類指標物件,該類指標物件要麼具有element_type作為成員型別,要麼是類模板的例項化,其中第一個模板引數用於表示所指向的型別。如果成員rebind和/或 pointer_to 被例項化(參見下文),則需要滿足其他要求。

如果類指標物件不滿足這些要求,仍可自定義特化此模板類以提供更特定的適用於該型別的功能。

模板引數

Ptr
類指標型別。
T
所指向的型別。

成員型別

以下別名是pointer_traits:

成員型別解釋未特化中的定義pointer_traits在...中的定義pointer_traits<T*>特化
指標指標型別模板引數PtrT*
element_type所指值的型別要麼Ptr::element_type(如果存在該型別),或者用於例項化該模板的類的第一個模板引數(如果Ptr(如果Ptr是類模板的例項化)。T
difference_type透過減去兩個型別為Ptr.Ptr::difference_type(如果存在該型別),或者std::ptrdiff_t否則為 false。std::ptrdiff_t
rebind<V>重新繫結到V要麼Ptr::rebind<V>(如果存在該型別),或者用於例項化該模板的類的例項化,使用Ptr作為第一個模板引數(如果VV*Ptr是類模板的例項化)。是別名模板。
*注意rebind是一個別名模板。

成員函式


示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// pointer_traits example
#include <iostream>
#include <memory>

// using pointer_traits to determine return type:
template <class T>
typename std::pointer_traits<T>::element_type dereference_pointer (T pt) {
  return *pt;
}

int main() {
  int* foo = new int(1);
  std::shared_ptr<int> bar (new int(2));

  std::cout << "foo: " << dereference_pointer (foo) << '\n';
  std::cout << "bar: " << dereference_pointer (bar) << '\n';

  delete foo;
  return 0;
}

輸出
foo: 1
bar: 2