鉴于此结构:
struct Foo {
std::array<int, 8> bar;
};
如果我没有bar
的实例,如何获取Foo
数组的元素数?
答案 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