std::meta::reflect_constant_array

来自cppreference.com
< cpp | meta
 
 
元编程库
类型特征
类型类别
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
类型属性
(C++11)
(C++11)
(C++14)
(C++11)(C++26 弃用)
(C++11)(C++20 前*)
(C++11)(C++20 弃用)
(C++11)
类型特征常量
元函数
(C++17)
受支持操作
关系与属性查询
类型修改
(C++11)(C++11)(C++11)
类型变换
(C++11)(C++23 弃用)
(C++11)(C++23 弃用)
(C++11)
(C++11)(C++20 前*)(C++17)

(C++11)
(C++17)
编译时有理数算术
编译时整数序列
 
在标头 <meta> 定义
template< ranges::input_range R >
consteval std::meta::info reflect_constant_array( R&& r );
(C++26 起)

返回一个反射,该反射表示一个数组对象,其各元素为 r 中的对应元素。

结果得到的对象是一个模板形参对象:它具有静态存储期,且具有模板实参等价内容的范围对应同一个对象。

如果 r 的大小不为零,则结果数组对象是一个可能非唯一的对象

Uranges::range_value_t<R> 并令 Tstd::remove_all_extents_t<U>

如果以下任意为真,则程序非良构:

参数

r - 一个 input_range

返回值

如果 r 的大小不为零,则返回一个反射,表示类型为 const T[N]模板形参对象(其中 Nr 的大小)。该模板形参对象的每个元素均模板实参等价于:

  • 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::reflect_constant 调用通过异常退出时,抛出 std::meta::exception

注解

std::meta::reflect_constant_array 的结果适用于 std::meta::substitute。如果调用方想要的是静态数组上的 而非反射值,那么通常 std::define_static_array 更为合适。

示例

参阅

将编译期数组提升为静态存储,返回静态数组的跨度。
(函数模板) [编辑]
将编译期字符串提升为静态存储,返回表示该静态字符串的反射。
(函数模板) [编辑]
返回表示某个值或模板形参对象的反射,适合用作常量模板实参
(函数模板) [编辑]