この構造が与えられた場合:
struct Foo {
std::array<int, 8> bar;
};
bar
のインスタンスがない場合、Foo
配列の要素数を取得するにはどうすればよいですか?
std::Tuple_size<decltype(Foo::bar)>::value
@ -Jarod42の 良い答え にもかかわらず、Tuple_size
を使用しないdecltype
に基づく別の可能な解決策があります。
C++ 11で動作する最小限の実用例に従います。
#include<array>
struct Foo {
std::array<int, 8> bar;
};
int main() {
constexpr std::size_t N = decltype(Foo::bar){}.size();
static_assert(N == 8, "!");
}
std::array
には、探している値を返すsize
というconstexprメンバー関数が既にあります。
Foo
にpublic static constexpr
メンバー。
struct Foo {
static constexpr std::size_t bar_size = 8;
std::array<int, bar_size> bar;
}
これで、Foo::bar_size
および命名の柔軟性が追加されていますbar_size
Foo
に同じサイズの複数の配列がある場合は、よりわかりやすいものに。
レガシーアレイと同じようにできます。
sizeof(Foo::bar) / sizeof(Foo::bar[0])
使用する:
sizeof(Foo::bar) / sizeof(int)