【发布时间】:2017-03-05 00:13:17
【问题描述】:
有没有办法扩展/修改/实现 constexpr 以返回多维 C 样式数组维度的 std::tuple?
#include <iostream>
#include <tuple>
template<typename T, std::size_t N>
auto arraysize(T (&arr)[N])
{
return std::make_tuple(N);
}
IOW,如何使数组大小适用于任意维数组?上面的“有效”但只返回一个维度:
int i[5];
std::cout << std::get<0>(arraysize(i)) << std::endl;
有效,并返回 5。而且,
char c[3][4];
std::cout << std::get<0>(arraysize(c)) << std::endl;
有效,返回 3,但是
std::cout << std::get<1>(arraysize(c)) << std::endl;
无法编译,因为 arraysize() 编码不正确。有没有办法将它编码为 constexpr 来处理任意维数组?尝试使用参数包,但没有成功。
【问题讨论】:
-
为什么不返回
std::array<std::size_t, dimcount>呢?
标签: c++ arrays multidimensional-array