在没有实例的情况下获取 std::array 的大小

Get size of std::array without an instance

鉴于此结构:

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

如果我没有 Foo 的实例,如何获取 bar 数组的元素数?

您可以使用 std::tuple_size:

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

你可以这样使用:

sizeof Foo().bar

您可以像处理旧数组一样执行此操作:

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

使用:

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

尽管@Jarod42 的 ,这里是另一个基于 decltype 的可能解决方案,它不使用 tuple_size.
它遵循一个适用于 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 成员函数,returns 您要查找的值。

您可以给 Foo 一个 public static constexpr 成员。

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

现在您从 Foo::bar_size 知道了 bar 的大小,并且如果 Foo 曾经有多个相同大小的数组,您可以更灵活地命名 bar_size 以更具描述性。