【发布时间】:2014-12-19 12:53:37
【问题描述】:
我想创建一个std::array<T, N> 的对象,但问题是我只能使用返回constexprtype 的函数,否则编译器会报错。这里的问题是我需要根据另一个数组的大小来计算这个数组的长度,可能是这样的:
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?
【问题讨论】:
-
std::array的大小必须在编译时知道。运行时大小的数组是std::vector。 -
作为 T.C.说,你的问题的答案是“你不能创建一个在运行时计算大小的
std::array。”您可以使用std::vector,也可以向我们提供有关您尝试解决的问题的更多信息,以便我们提出替代方法。 -
最好能说明投反对票的原因。我的问题没有问题,问题在于 C++ 语言功能。
-
实际的问题是为什么没有办法制作一个恒定长度的
vector。这是一个很好的问题,但无法在 SO 中回答。 -
@Elazar 我不知道这是不可能的。如果我知道我一开始就不会问它。
标签: c++ c++11 constexpr stdarray