std::meta::identifier_of, std::meta::u8identifier_of

来自cppreference.com
< cpp | meta
在标头 <meta> 定义
consteval std::string_view identifier_of( std::meta::info r );
(1) (C++26 起)
consteval std::u8string_view u8identifier_of( std::meta::info r );
(2) (C++26 起)

返回与 r 所表示事物关联的标识符。

1) 结果是一个以普通字面量编码的字符串。
2) 结果是一个 UTF-8 字符串。

结果字符串按如下方式确定:

  • 如果 r 表示具有以链接为目的的 typedef 名的实体,则返回该名称。
  • 否则,如果 r 表示字面量运算符或字面量运算符模板,则返回其字面量后缀标识符。
  • 否则,如果 r 表示函数 F 的形参 P,则设 S 为从求值上下文中的某一点可达的声明集合(忽略任何显式实例化),这些声明声明了 F 或者声明了 F 是它的特化的模板化函数,返回 S 中的声明为对应于 P 的形参所引入的名称。
  • 否则,如果 r 表示一个实体,则返回其所声明的名称。
  • 否则,如果 r 表示直接基类关系,则返回 std::meta::identifier_of(std::meta::type_of(r))std::meta::u8identifier_of(std::meta::type_of(r))
  • 否则,如果 r 表示数据成员描述 (T, N, A, W, NUA, ANN),则返回该描述的名称 N

参数

r - 一个反射值

返回值

如上所述的、r 所表示事物的标识符。

异常

除非 std::meta::has_identifier(r)true 且结果字符串在相应编码中可表示,否则抛出 std::meta::exception

注解

结果 V 是以空字符结尾的:V.data()[V.size()] 保证为 '\0'V 中的每个元素都是一个具有静态存储期的可能非唯一的对象,可在常量表达式中使用;指向此类元素的指针不适合用作指针类型的非类型模板形参的模板实参。

示例

参阅

检查反射是否表示带有标识符的实体
(函数) [编辑]