[英]creating an std::array with size calculated during run time
我想创建一个std::array<T, N>
的对象,但问题是我只能使用返回constexpr
类型的函数或编译器会抱怨。 这里的问题是我需要根据另一个数组的大小来计算这个数组的长度,这可能是这样的:
template <typename T>
struct DataLength
{
template <typename iter>
size_t maxPossibleLength(iter begin, iter end)
{
size_t m_size = 0;
while (begin != end) {
m_size = m_size << 8 | std::numeric_limits<T>::max(); /* 0xff for uchar*/
begin++;
}
return m_size;
}
}
我如何转换此功能的输出,以便我可以使用它而不是N
?
您可以将其写为递归constexpr
函数,并对原始数组的长度进行计算,这也应该是编译时间。
问题是你的函数(如果我理解正确的话)根本不需要得到迭代器。 它需要一个长度N.所以它可以做类似的事情:
template<typename T>
constexpr size_t maxLength(size_t n, size_t m_size=0) {
return n==0 ? m_size : maxLength<T>(n-1, m_size << 8 | std::numeric_limits<T>::max());
}
它运行:
std::array<int, 15> a;
std::array<float, maxLength<int>(a.size())> b;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.