Return std::array 来自函数作为范围

Return std::array from a function as a range

假设我有两个数组:

constexpr std::array<int, 3> a1{1, 2, 3};

constexpr std::array<int, 5> a2{1, 2, 3, 4, 5};

将它们转换为相同类型的范围以便可以使用它们的 return 值调用 process_result 函数的正确方法是什么?

constexpr void process_result(RangeType range) { for (auto elem: range) { //do something with elem }

所以问题是什么是RangeType

一个明显的解决方案是将 std::array 替换为 std::vector,但我想知道如何处理 std::array

您可以使用(非拥有)std::span 来允许任何连续的范围:

constexpr void process_result(std::span<const int> range)
{
    for (auto elem: range) {
        //do something with elem
    }
}

如果您不一定需要函数,而是可以使用函数模板,那么您可以通过支持所有范围使其更通用;不仅仅是连续的:

constexpr void
process_result(const auto& range)
{
    for (const auto& elem: range) {
        //do something with elem
    }
}