Spec-Zone.ru › C++

Именованные требования C++: AccessorPolicy (начиная с C++23)

AccessorPolicy определяет, как получать доступ к элементам по заданному дескриптору данных и индексу. Это требование используется в качестве политики в std::mdspan для указания способа получения ссылки на элемент с использованием базового одномерного индекса.

Требования

Тип A удовлетворяет требованиям AccessorPolicy, если он моделирует copyable и выполняются следующие true:

  • std::is_nothrow_move_constructible_v<A>
  • std::is_nothrow_move_assignable_v<A>
  • std::is_nothrow_swappable_v<A>

Кроме того, для следующих типов и значений выражения, указанные в таблице ниже, корректны и имеют заданную семантику:

Обозначения

Тип Определение
A тип политики доступа
OP тип политики смещения
Значение Определение
a значение типа (возможно, с квалификатором const) A
p значение типа (возможно, с квалификатором const) A::data_handle_type
i, j, n значения типа std::size_t

Типы-члены

Тип Определение Требования
A::element_type не определено
  • Полный тип объекта, не являющийся абстрактным типом класса
A::data_handle_type не определено[1]
  • Моделирует copyable
  • Следующие значения являются true:
    • std::is_nothrow_move_constructible_v<typename A::data_handle_type>
    • std::is_nothrow_move_assignable_v<typename A::data_handle_type>
    • std::is_nothrow_swappable_v<typename A::data_handle_type>
A::reference не определено[2]
  • std::common_reference_with<typename A::reference&&,typename A::element_type&> является true
A::offset_policy OP
  • Удовлетворяет требованиям AccessorPolicy
  • std::constructible_from<OP, const A&> является true
  • typenameOP​::​element_type и typenameA​::​element_type являются одним и тем же типом
  1. Не обязательно должен быть element_type*.
  2. Не обязательно должен быть element_type&.

Функции-члены

Выражение Возвращаемый тип Семантика
a.access(p, i) typenameA::reference
  • Выражение сохраняет равенство (equality-preserving).
a.offset(p, i) typenameA::offset_policy
::data_handle_type
  • Значение q такое, что для b, являющегося A::offset_policy(a), и любого целого числа n, для которого [0, n) является доступным диапазоном (см. ниже) для p и a.
    • [0, n - i) является доступным диапазоном для q и b; и
    • b.access(q, j) предоставляет доступ к тому же элементу, что и a.access(p, i + j), для каждого j в диапазоне [0, n - i).
  • Выражение сохраняет равенство (equality-preserving).

Доступный диапазон

Диапазон индексов [0, N) является доступным диапазоном для заданного дескриптора данных и средства доступа, если для каждого индекса в диапазоне функция-член access возвращает корректную ссылку на элемент.

Стандартная библиотека

Следующие типы стандартной библиотеки удовлетворяют требованиям AccessorPolicy:

default_accessor
(C++23)
тип для индексированного доступа к элементам mdspan
(шаблон класса)
aligned_accessor
(C++26)
тип для выровненного доступа к элементам mdspan
(шаблон класса)
Определён в пространстве имён std::linalg
scaled_accessor
(C++26)
std::mdspan политика доступа, ссылка которой представляет произведение фиксированного коэффициента масштабирования и ссылки вложенного средства доступа std::mdspan
(шаблон класса)
conjugated_accessor
(C++26)
std::mdspan политика доступа, ссылка которой представляет комплексно-сопряжённое значение ссылки вложенного средства доступа std::mdspan
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/AccessorPolicy

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API