4.3 構造体の配列メンバの要素数を返す。
次の関数テンプレートは、指定したメンバへのポインタが配列型のメンバのものである場合、その要素数を返します。
template<class T, class C, std::size_t N>
std::size_t member_count_of(T (C::*pm)[N])
{
return N;
}
例によって定数式に展開することはできません。今回は特別に、定数式に展開可能なテンプレートについても考察してみましょう。
template<class T, class C, std::size_t N> char (* member_count_type_of(T (C::*pm)[N]) )[N];
member_count_type_of 関数テンプレートは、3.2 で取り上げた member_type_of と同じで、関数原型しかありません。これを使って、
sizeof *member_count_type_of(&A::array)
のようにしてやれば、メンバの要素数を定数式として取り出すことができます。
元ネタ
ブックナビゲーション
- 技術情報
- Boost C++ Libraries メモ
- C++と組込み環境
- C++サンプル集
- C++テンプレート集
- C++プログラマのためのC言語入門
- C/C++迷信集
- C99関数・マクロ・前処理スクリプト集
- C言語再入門
- C言語徹底入門
- Drupal メモ
- TOPPERS 情報
- ベターCとしてのC++
- マイコン メモ
- ライブラリ開発入門
- 分割コンパイルをきわめる
- 擬似プロセッサを作る
- 象の卵を探して...
- 車輪の再発明
- 過去の情報

