Spec-Zone.ru › C++

std::meta::reflect_constant_array

Определён в заголовке <meta>
template< ranges::input_range R >
consteval std::meta::info reflect_constant_array( R&& r );
(начиная с C++26)

Возвращает отражение, представляющее объект массива, элементы которого соответствуют элементам r.

Результирующий объект является объектом параметра шаблона: он имеет статическую длительность хранения, а диапазоны с содержимым, эквивалентным аргументам шаблона, соответствуют одному и тому же объекту.

Если размер r не равен нулю, результирующий объект массива является потенциально неуникальным объектом.

Пусть U — это ranges::range_value_t<R>, а T — это std::remove_all_extents_t<U>.

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

  • T не является структурным типом.
  • T не удовлетворяет концепту copy_constructible.
  • U не является типом массива, а std::is_constructible_v<T, ranges::range_reference_t<R>> имеет значение false.

Параметры

r - входной input_range

Возвращаемое значение

Если размер r не равен нулю, возвращается отражение, представляющее объект параметра шаблона типа const T[N] (где N — это размер r). Каждый элемент объекта параметра шаблона эквивалентен аргументу шаблона:

  • std::meta::reflect_constant_array(*it), если U является типом массива;
  • std::meta::reflect_constant(static_cast<T>(*it)) в противном случае;

где it — итератор, указывающий на соответствующий элемент r.

В противном случае (если размер r равен нулю) возвращается отражение, представляющее объект параметра шаблона типа const std::array<T, 0>, инициализированный значением {}.

Исключения

Может выбрасывать любое исключение, выброшенное:

  • операцией над r или над итераторами либо сентинелами r;
  • любым аргументом std::meta::reflect_constant или любым вызовом std::meta::reflect_constant_array, описанным выше.

Выбрасывает std::meta::exception, если при любом вызове std::meta::reflect_constant выполнение завершилось бы выбрасыванием исключения.

Примечания

Результат std::meta::reflect_constant_array подходит для использования с std::meta::substitute. Если вызывающей стороне нужен std::span статического массива, а не значение отражения, обычно лучше подходит std::define_static_array.

Пример

См. также

define_static_array
(C++26)
перемещает массив времени компиляции в статическую память и возвращает span статического массива
(шаблон функции)
reflect_constant_string
(C++26)
перемещает строку времени компиляции в статическую память и возвращает отражение, представляющее статическую строку
(шаблон функции)
reflect_constant
(C++26)
возвращает отражение, представляющее значение или объект параметра шаблона, пригодное для использования в качестве константного аргумента шаблона
(шаблон функции)

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

Spec-Zone.ru

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