Namespaces
Variants

std::meta::reflect_constant_array

来自 zh.cppreference.net
< cpp | meta
 
 
 
反射库
 
反射类型和查询
反射查询
反射布局查询
类型属性
类型属性查询
 
定义于头文件 <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::exceptionstd::meta::reflect_constant。

注解

std::meta::reflect_constant_array 的结果适用于与 std::meta::substitute 配合使用。如果调用者需要静态数组的 std::span 而不是反射值,那么 std::define_static_array 通常更合适。

示例

参阅

将编译时数组提升至静态存储,返回静态数组的 span
(函数模板)
将编译时字符串提升至静态存储,返回表示静态字符串的反射
(函数模板)
返回表示值或模板参数对象的反射,适用于作为常量模板实参
(函数模板)