【问题标题】:What is gsl::multi_span to be used for?gsl::multi_span 的用途是什么?
【发布时间】:2017-07-19 21:41:47
【问题描述】:

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

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

所以,显然这是gsl::span 的某种多维版本。但这应该是什么意思?为什么我们需要这个多维跨度,或者更确切地说——我们什么时候使用它?我似乎找不到任何关于此的文档。

【问题讨论】:

    标签: c++ cpp-core-guidelines


    【解决方案1】:

    简而言之,就是跨越一块连续的内存,代表多维数组。

    这是一个使用示例:

    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
    

    从链接的源代码看来,它也支持运行时边界,但我不确定这些的正确语法。

    【讨论】:

    • 我想知道为什么我们需要一个单独的类呢?似乎可以设计span,使其适用于一维和多维。
    • @Mikhail 它不在 GSL 中,它是 Microsoft 自己的扩展。多维跨度应该如何实现可能没有共识,或者它们存在一些问题,因此它们没有进入 GSL。显然,微软决定它仍然需要它们,或者推出了自己的概念验证实现进行测试,因此,为了不破坏现有的跨度类,它制作了一个新的。
    • 在单维和多维跨度之间进行分离可能有一些语义价值。
    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2011-12-17
    • 2010-11-21
    相关资源
    最近更新 更多