mdarray 有 submdspan 的等价物吗?

Is there an equivalent of submdspan for mdarray?

提问人:Simplex 提问时间:7/23/2022 最后编辑:einpoklumSimplex 更新时间:3/19/2023 访问量:330

问:

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

但是,尽管该函数可以生成 的子集,但我找不到 的类似物。我所期望的是一个行为与 完全相同并返回 的函数,但它对 .submdspanmdspanmdarraysubmdspanmdspanmdarray

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

编辑:

我用一个自制解决方案暂时解决了它,该解决方案以重载的形式出现,然后创建一个映射到整个 的临时解决方案,并调用它。submdspanmdarraymdspanmdarraysubmdspan

它现在完成了这项工作!但我不相信这涵盖了所有可以想象的,因为目前几乎没有文档。仍然希望得到原始问题的答案。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...);
}
C 标准库 C++- 实验性 MDSPAN

评论

0赞 KamilCuk 7/23/2022
为什么在这里问?询问该存储库的作者。
0赞 Simplex 7/26/2022
@KamilCuk,因为这似乎是一个成熟的提议,并可能成为C++标准AFAIK的一部分。另外,我不知道如何联系到作者。

答:

6赞 Christian Trott 10/11/2022 #1

只是随机遇到了这个:因为我是所有相关事物(、、和参考实现)的主要作者/维护者,是的,我们可以添加它。我这样做的方式实际上是调用 的“to_mdspan”函数,并在此基础上调用 submdspan:mdspanmdarraysubmdspanmdarray

auto sub = submdspan(mda.to_mdspan(), slice_specifiers...);

为了使这两个提案独立,我现在将把它分开(除非 LEWG 另有说明),并写一篇后续论文,它只是添加一个重载,将上述操作转发到重载中,将 .submdspanmdspan

但一般来说:你可以在 repo 上打开一个问题来询问提案问题。