可视化 C++ mdspan

Visual C++ mdspan

提问人:dr_eck 提问时间:11/15/2023 最后编辑:heap underrundr_eck 更新时间:11/15/2023 访问量:92

问:

我一直在气喘吁吁地等待Microsoft发布他们的C++ std::mdspan实现。它今天在 V19 预览版 1 中发布。我正在尝试尝试,但似乎不起作用。这是我的代码:

    std::vector<double> Bdat(dfcts.ndf * vbs.nvb);     // allocate the space
    using Dext = std::dextents<size_t, 2>;
    std::mdspan<double, Dext> B{ Bdat.data(), dfcts.ndf, vbs.nvb};    // create the mdspan
    B[0, 0] = 1.0;

最后一行给出错误:“没有运算符”[]“与这些操作数匹配。请告诉我我犯了一个明显的语法错误。我真的不想听到我可以创建一个 mdspan 但不能使用它。

++ 的 C++23

评论


答:

2赞 康桓瑋 11/15/2023 #1

MSVC 当前不支持多维语言功能,您可能需要使用另一个重载来接受 或 在此之前operator[]arrayspan

B[std::array{0, 0}] = 1.0;

评论

0赞 dr_eck 11/16/2023
感谢您的解决方法!我还注意到,预览版 2 或 3 中不需要多维 [] 运算符。看起来我的代码在一段时间内会很丑陋,但至少我可以让它工作。
0赞 dr_eck 11/17/2023
哎呀!我刚刚在 cppreference.com 上查看了对多维下标运算符 (P2128R6) 的计划支持,发现 MSVC 没有计划支持此功能。这是链接: en.cppreference.com/w/cpp/compiler_support/23 .奇怪的是,除了当前预览版(19.39 = 2022 版本 17.9)之外,没有发布任何计划,这与过去的做法有所不同。我可能不得不切换到 Clang。