web-dev-qa-db-ja.com

インスタンスなしでstd :: arrayのサイズを取得します

この構造が与えられた場合:

struct Foo {
  std::array<int, 8> bar;
};

barのインスタンスがない場合、Foo配列の要素数を取得するにはどうすればよいですか?

49
ChronoTrigger

std::Tuple_size

std::Tuple_size<decltype(Foo::bar)>::value
81
Jarod42

@ -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メンバー関数が既にあります。

26
skypjack

Foopublic static constexprメンバー。

struct Foo {
 static constexpr std::size_t bar_size = 8;
 std::array<int, bar_size> bar;
}

これで、Foo::bar_sizeおよび命名の柔軟性が追加されていますbar_sizeFooに同じサイズの複数の配列がある場合は、よりわかりやすいものに。

7
Willy Goat

レガシーアレイと同じようにできます。

sizeof(Foo::bar) / sizeof(Foo::bar[0])
3
Waxrat

使用する:

sizeof(Foo::bar) / sizeof(int)
0
Gilson PJ