获取没有实例的std :: array的大小

时间:2016-12-27 12:25:19

标签: c++ c++11 stdarray

鉴于此结构:

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

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

6 个答案:

答案 0 :(得分:80)

您可以使用std::tuple_size

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

答案 1 :(得分:26)

尽管@ Jarod42是good answer,但这是基于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成员函数,它返回您要查找的值。

答案 2 :(得分:7)

您可以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命名为更具描述性的内容。

答案 3 :(得分:3)

你可以像传统阵列那样做:

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

答案 4 :(得分:0)

使用:

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

答案 5 :(得分:-4)

您可以使用:

sizeof Foo().bar