Получить размер std:: array без экземпляра - программирование
Подтвердить что ты не робот

Получить размер std:: array без экземпляра

С учетом этой структуры:

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

Как я могу получить количество элементов массива bar, если у меня нет экземпляра Foo?

4b9b3361

Ответ 1

Вы можете использовать std::tuple_size:

std::tuple_size<decltype(Foo::bar)>::value

Ответ 2

Несмотря на хороший ответ @Jarod42, вот еще одно возможное решение на основе decltype, которое не использует tuple_size.
Это следует за минимальным рабочим примером, который работает в С++ 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 уже имеет функцию constexpr member с именем size, которая возвращает значение, которое вы ищете.

Ответ 3

Вы можете дать член Foo a 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 когда-либо имеет несколько массивов одинакового размера.

Ответ 4

Вы можете сделать это так же, как для устаревших массивов:

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

Ответ 5

Использование:

sizeof(Foo::bar) / sizeof(int)

Ответ 6

Вы можете использовать как:

sizeof Foo().bar