获取没有实例的std ::数组的大小
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
尽管有 @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
相关文章:
- std::向量与传递值的动态数组
- std::vector的包装器,使数组的结构看起来像结构的数组
- 初始化具有非默认构造函数的std::数组项的更好方法
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 将 int 数组转换为 std::vector<int*>
- 输入std::数组时出现问题
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 为什么std::vector比数组慢
- C++如何生成std::数组列表
- 捕获lambda中的std::数组
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- std::数组边界检查如何工作?
- 通过unique_ptr访问std::数组
- 我正在使用 std::bitset 并尝试创建两个大小为 100,000,000,000 的数组 std::bitset
- 对象的数组-STD ::数组 - 构造函数初始化问题
- 标准::数组<std::array<T、N2>、N> 数据成员上的括号运算符重载
- 从未来对象数组std::vector中检索值
- 如何将动态数组(std::vector)传递给odbc函数SQLBindParameter