gsl :: multi_span用于什么?

ein*_*ica 6 c++ cpp-core-guidelines

C ++核心准则提到跨度,而不是“跨度”。但是-我看到Microsoft的GSL实现中有一个multi_span

template <
    typename ValueType,
    std::ptrdiff_t FirstDimension,
    std::ptrdiff_t... RestDimensions
>
class multi_span { ... };
Run Code Online (Sandbox Code Playgroud)

因此,显然这是的某种多维版本gsl::span。但是那是什么意思呢?为什么我们需要这个多维范围,或者更确切地说-我们什么时候使用它?我似乎找不到任何文档。

Rev*_*lot 5

简而言之,它是连续内存的跨度,代表多维数组。

这是一个使用示例:

int data[6] = {0, 1, 2, 3, 4, 5};
multi_span<int, 2, 3> span{data, 6};
std::cout << span[1][1] << '\n'; //Outputs 4
Run Code Online (Sandbox Code Playgroud)

从链接的来源来看,它似乎还支持运行时范围,但是我不确定这些范围的正确语法。

  • @Mikhail它不在GSL中,它是Microsoft自己的扩展。关于如何实现多维跨度可能未达成共识,或者它们存在一些问题,因此它们并未纳入GSL。显然,Microsoft决定仍然希望它们,或者推出自己的概念验证实施以进行测试,因此,为了不破坏现有的span类,它制作了一个新的类。 (2认同)