mdarray 是否有相当于 submdspan 的功能?

Sim*_*lex 1 c++ std c++-experimental mdspan

令人兴奋的 的存储库mdspan是为 C++ 标准库建议的多维类似物std::span,现在还包含密切相关的 的参考实现mdarray,与mdspan拥有其数据不同。

但是,尽管该submdspan函数可以生成 的子集mdspan,但我找不到 的类似物mdarraysubmdspan我期待的是一个行为与返回完全相同的函数mdspan,但它对 进行操作mdarray

这是有计划但尚未实施吗?如果没有,为什么不呢?

编辑:

我已经用自制解决方案暂时解决了这个问题,其形式是重载submdspanmdarray然后创建一个映射mdspan到整个 的临时文件mdarray,并调用submdspan它。

现在它可以完成工作了!但我不确定这是否涵盖了所有可能的情况mdarray,因为目前几乎没有文档。仍然希望得到原来问题的答案。

template <class ElementType, class Extents, class LayoutPolicy, class... SliceSpecs>
auto submdspan(
    mdarray<ElementType, Extents, LayoutPolicy> &arr, 
    SliceSpecs... slices)
{
    return submdspan(
        mdspan<ElementType, Extents, LayoutPolicy>(arr.data(), arr.mapping()), 
        slices...);
}
Run Code Online (Sandbox Code Playgroud)

小智 6

只是随机遇到了这一点:因为我是所有相关事物(mdspan、、和参考实现)的主要作者/维护者,是的,我们可以添加这一点mdarraysubmdspan我这样做的方法实际上是调用 的“to_mdspan”函数mdarray,并调用 submdspan :

auto sub = submdspan(mda.to_mdspan(), slice_specifiers...);
Run Code Online (Sandbox Code Playgroud)

为了使这两个提案独立,我将暂时将其分开(除非 LEWG 另有说明)并编写一篇后续论文,该论文仅添加一个重载,将submdspan上述内容转发到采用mdspan.

但一般来说:您可以在存储库上打开一个问题来询问提案问题。