在没有实例的情况下获取 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
以更具描述性。
鉴于此结构:
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
以更具描述性。