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)

のようにしてやれば、メンバの要素数を定数式として取り出すことができます。


元ネタ
このエントリーを含むはてなブックマーク