获取没有实例的std ::数组的大小

Get size of std::array without an instance

本文关键字:数组 std 实例 获取      更新时间:2023-10-16

给定此结构:

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

如果我没有 Foo的实例?

,如何获得bar数组的元素数

您可以使用std::tuple_size

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

尽管有 @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成员函数,该函数返回您要寻找的值。

您可以给Foo public static constexpr成员。

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

现在,您知道Foo::bar_size的栏的大小,并且如果Foo具有相同大小的多个阵列,则将bar_size命名为更具描述性的灵活性。

您可以这样做与旧数组相同:

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

使用:

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

您可以使用:

sizeof Foo().bar