std::meta::is_enumerable_type

来自cppreference.com
< cpp | meta
 
 
 
反射库
 
反射类型与查询
反射查询
反射布局查询
类型属性
类型属性查询
 
在标头 <meta> 定义
consteval bool is_enumerable_type( std::meta::info r );
(C++26 起)

判断 r 是否表示一个完整的类类型,或者一个枚举项列表已完全定义的枚举类型,或者它们的类型别名。

形式上,如果满足以下条件,则类型 T 从点 P 起是``可枚举的``:

  • T 是在点 P 处完整的类类型,或者
  • T 是由声明 D 定义的枚举类型,使得从 P 可达 D,并且 P 不位于 D枚举说明符 内部。

参数

r - 一个反射值

返回值

如果 std::meta::dealias(r) 表示的类型在求值上下文中的某个点上是可枚举的,则返回 true,否则返回 false

注解

标准反射函数要求一个类型是可枚举的,以便获取其基类、成员或枚举项的列表。

示例

#include <meta>

struct A; // 不完整类型
static_assert(std::meta::is_enumerable_type(^^A) == false);

struct B {}; // 完整类型
static_assert(std::meta::is_enumerable_type(^^B) == true);

template <typename>
struct C; // 不完整的类模板
static_assert(std::meta::is_enumerable_type(^^C<long>) == false);

template <>
struct C<int> {}; // 完整的显式模板特化
static_assert(std::meta::is_enumerable_type(^^C<int>) == true);

template <>
struct C<long>; // 不完整的显式模板特化
static_assert(std::meta::is_enumerable_type(^^C<long>) == false);

enum class E;
static_assert(std::meta::is_enumerable_type(^^E) == false);

enum class E { e };
static_assert(std::meta::is_enumerable_type(^^E) == true);
static_assert(std::meta::is_enumerable_type(^^E::e) == false);

union U;
static_assert(std::meta::is_enumerable_type(^^U) == false);

union U { int i; short j; };
static_assert(std::meta::is_enumerable_type(^^U) == true);

int main() {}

参阅

检查反射是否表示个完整类型
(函数) [编辑]
Morty Proxy This is a proxified and sanitized view of the page, visit original site.