gpt4 book ai didi

c++ - 创建一个 std::array,其大小在运行时计算

转载 作者:太空狗 更新时间:2023-10-29 21:19:41 24 4
gpt4 key购买 nike

我想创建一个 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;

关于c++ - 创建一个 std::array,其大小在运行时计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26535139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com