2017-07-19 124 views
4

C++核心指南提到跨度,而不是“多跨度”。但是 - 我看到微软的GSL实现有一个multi_span class什么是gsl :: multi_span用于?

template < 
    typename ValueType, 
    std::ptrdiff_t FirstDimension, 
    std::ptrdiff_t... RestDimensions 
> 
class multi_span { ... }; 

所以,很显然这是某种形式的多维版本的gsl::span。但是,这是什么意思?为什么我们需要这种多维跨度,或者说 - 我们什么时候使用它?我似乎无法找到任何文件。

回答

3

总之,它是一个连续的内存片段,它代表了多维数组。

下面是使用的例子:

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 

从链接源,现在看来,它也支持运行时的界限,但我不知道那些正确的语法。

+0

我想知道为什么我们需要一个单独的课程呢?似乎有可能以适用于一维和多维的方式设计“span”。 – Mikhail

+1

@Mikhail它不在GSL中,它是微软自己的扩展。可能关于应该如何实施多维跨度还是他们存在一些问题没有一致意见,所以他们没有成为GSL。显然,微软决定仍然希望他们,或者自己测试概念实施证明,所以,为了不打破现有的跨班级,它做了一个新的。 –