std::array 模板函数

std::array template function

我有一个简单的函数可以随机播放 std::array

中的元素
template <typename T, uint size>
void Shuffle(std::array<T, size> &arr) {
    for (uint i = 0; i < arr.size() - 1; i++)
    {
        std::swap(arr[i], arr[Random(i, arr.size())]);
    }
}

make/g++ 不喜欢我声明它的方式,给出了错误“变量或字段 Shuffle 声明无效”。根据我的发现,这可能是一条不相关的错误消息,但我无法弄清楚这里到底出了什么问题。

uintstd::array 的第二个模板参数的类型不匹配,即 std::size_t。这会导致调用 Shuffle 时模板参数推导失败,除非您明确指定模板参数。

您应该声明类型为 std::size_t 的第二个模板参数。例如

template <typename T, std::size_t size>
void Shuffle(std::array<T, size> &arr)