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
}
}
假设我有两个数组:
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
}
}