Комментарии 2
Спасибо за вводную статью!
Хочется добавить, что std::mdspan - штука еще более универсальная, чем кажется на первый взгляд.
Пользовательские стратегии Extents, LayoutPolicy, AccessorPolicy позволяют:
отображать разные комбинации индексов на одни и те же элементы низлежащего массива (например, для симметричных матриц)
использовать вместо массива вообще произвольную структуру данных
не использовать вообще никакую память и вычислять значения на лету чистой функцией
вычислять значения на лету с побочными эффектами - например, обращаясь к операционной системе или датчику робота
владеть памятью/ресурсом, например, задействовав
std::vector/std::shared_ptr<const std::vector<T>>в качествеdata_handle_typeвычислять значения асинхронно
, Карл!
И всё это - за единым статическим интерфейсом.
Примеры вдохновлены докладом Griswald Brooks на CppCon 2024
Как же я был удивлён в своё время, что такого прокси-доступа не было в стандарте! Пришлось и пока приходится делать самописные обёртки
std::mdspan в C++23: многомерные данные без самодельных view