![]() |
hamigaki::member_access_traits —
cv修飾のメンバ変数への伝播を模倣する
template<typename T, typename U> struct member_access_traits { // types typedef U value_type; typedef /* see below */ reference; typedef /* see below */ pointer; };
C++ではオブジェクトのcv(const
/volatile
)修飾がメンバ変数へのアクセスに伝播される。member_access_traits
クラステンプレートはこのcv修飾の伝播を模倣し、メンバ変数にアクセスした際の型を返す一種のメタ関数である。このクラステンプレートは次のようなメンバ変数を返す関数テンプレートを作成するのに役に立つ。
template<class T> typename hamigaki::member_access_traits< T, typename T::value_type >::reference front(T& x) { return *(x.begin()); }
メンバの意味は次の通り。
メンバ | 説明 |
---|---|
member_access_traits<T, U>::value_type
|
U
|
member_access_traits<T, U>::reference
|
型T のオブジェクトから型U のメンバへアクセスした場合の参照型 |
member_access_traits<T, U>::pointer
|
型T のオブジェクトから型U のメンバへアクセスした場合のポインタ型 |
reference
とpointer
は次のようになる。
T
|
U
|
reference
|
pointer
|
---|---|---|---|
foo
|
bar
|
bar&
|
bar*
|
const foo
|
bar
|
const bar&
|
const bar*
|
const foo
|
bar&
|
bar&
|
bar*
|
foo
|
const bar
|
const bar&
|
const bar*
|
volatile foo
|
const bar
|
const volatile bar&
|
const volatile bar*
|
製作著作 © 2006-2008 Takeshi Mouri |