NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
反射系统

运行时类型反射系统 更多...

struct  neforce::reflect::type_name< T >
 类型名称获取器 更多...
class  neforce::reflect::meta_any
 类型擦除容器 更多...
struct  neforce::reflect::enum_entry
 枚举条目 更多...
class  neforce::reflect::meta_enum
 枚举反射元数据类 更多...
class  neforce::reflect::meta_function
 函数反射元数据类 更多...
class  neforce::reflect::meta_property
 属性反射元数据类 更多...
class  neforce::reflect::type_builder< T >
 类型反射构建器 更多...
class  neforce::reflect::registry
 反射类型注册表 更多...
class  neforce::reflect::meta_type
 类型反射元数据类 更多...

宏定义

#define NEFORCE_REFLECT_REGISTER(Class)
 注册类型(无基类)
#define NEFORCE_REFLECT_REGISTER_DERIVED(Class, Base)
 注册类型(带基类)
#define NEFORCE_REFLECT_RESOLVE_BASES()
 统一解析所有待解析的基类引用
#define NEFORCE_REFLECT_OBJ(Class)
 标记类需要反射注册
#define NEFORCE_REFLECT_PROP(type, name)
 标记成员属性
#define NEFORCE_REFLECT_PROP_ATTR(type, name, attrs)
 标记带注解的成员属性
#define NEFORCE_REFLECT_FUNC(ret, name, ...)
 标记成员函数
#define NEFORCE_REFLECT_SIGNAL(sig_type, name, ...)
 标记信号成员
#define NEFORCE_REFLECT_ENUM(Enum, Underlying)
 标记枚举类型需要反射注册
#define NEFORCE_REFLECT_ENUM_VAL(Enum, Name)
 标记枚举值条目
#define NEFORCE_DB_TABLE(TableName)
 指定数据库表名

类型定义

using neforce::reflect::type_id = size_t
 类型标识符

枚举

enum  neforce::reflect::property_attr : uint16_t {
  neforce::reflect::PROP_NONE = 0 , neforce::reflect::PROP_TRANSIENT = 1 << 0 , neforce::reflect::PROP_REQUIRED = 1 << 1 , neforce::reflect::PROP_READ_ONLY = 1 << 2 ,
  neforce::reflect::PROP_OPTIONAL = 1 << 3 , neforce::reflect::PROP_VERSIONED = 1 << 4 , neforce::reflect::PROP_PRIMARY_KEY = 1 << 5 , neforce::reflect::PROP_AUTO_INC = 1 << 6 ,
  neforce::reflect::PROP_UNIQUE = 1 << 7 , neforce::reflect::PROP_INDEX = 1 << 8 , neforce::reflect::PROP_FOREIGN_KEY = 1 << 9
}
 属性注解标志 更多...
enum class  neforce::reflect::container_kind : uint8_t { container_kind::none , container_kind::sequential , container_kind::associative }
 容器类型标识 更多...

函数

template<typename T>
constexpr type_id neforce::reflect::type_id_for () noexcept
 计算类型 T 的运行时期类型标识
void neforce::reflect::swap (meta_any &lhs, meta_any &rhs) noexcept
 交换两个 meta_any
constexpr bool neforce::reflect::prop_has_attr (const uint16_t attrs, const property_attr flag) noexcept
 检查属性注解是否包含指定标志
template<typename T, enable_if_t< is_class_v< T >, int > = 0>
type_builder< T > neforce::reflect::reflect (string_view name)
 创建类型反射构建器

变量

template<typename T>
constexpr string_view neforce::reflect::type_name_v = type_name<T>::value
 type_name 的便捷访问变量模板

详细描述

运行时类型反射系统

宏定义说明

◆ NEFORCE_DB_TABLE

#define NEFORCE_DB_TABLE ( TableName)

指定数据库表名

参数
TableName数据库表名字符串字面量

当目标表名与类名不一致时,在类体内放置此宏指定表名映射。 扫描器会生成 table_name() 调用将表名写入 meta_type。

在文件 reflect_macros.hpp95 行定义.

◆ NEFORCE_REFLECT_ENUM

#define NEFORCE_REFLECT_ENUM ( Enum,
Underlying )

标记枚举类型需要反射注册

参数
Enum枚举类型名
Underlying底层整数类型

此标记宏用于让扫描器识别枚举类型并生成反射注册代码。 功能版本在 reflect.hpp 中定义。

在文件 reflect_macros.hpp77 行定义.

◆ NEFORCE_REFLECT_ENUM_VAL

#define NEFORCE_REFLECT_ENUM_VAL ( Enum,
Name )

标记枚举值条目

参数
Enum枚举类型名
Name枚举值名称

在文件 reflect_macros.hpp85 行定义.

◆ NEFORCE_REFLECT_FUNC

#define NEFORCE_REFLECT_FUNC ( ret,
name,
... )

标记成员函数

参数
ret返回值类型
name函数名称
...参数类型列表

在文件 reflect_macros.hpp54 行定义.

◆ NEFORCE_REFLECT_OBJ

#define NEFORCE_REFLECT_OBJ ( Class)

标记类需要反射注册

参数
Class类名

在类体内放置此宏,扫描器将为该类生成完整的 meta_type 注册代码。

在文件 reflect_macros.hpp25 行定义.

◆ NEFORCE_REFLECT_PROP

#define NEFORCE_REFLECT_PROP ( type,
name )

标记成员属性

参数
type属性类型
name属性名称

在类体内放置此宏标记需要反射的成员变量。 扫描器会检查类定义中对应的成员声明。

在文件 reflect_macros.hpp36 行定义.

◆ NEFORCE_REFLECT_PROP_ATTR

#define NEFORCE_REFLECT_PROP_ATTR ( type,
name,
attrs )

标记带注解的成员属性

参数
type属性类型
name属性名称
attrs属性注解(PROP_TRANSIENT | PROP_OPTIONAL 等)

在文件 reflect_macros.hpp45 行定义.

◆ NEFORCE_REFLECT_REGISTER

#define NEFORCE_REFLECT_REGISTER ( Class)
值:
static auto _neforce_reflect_##Class = _NEFORCE reflect::reflect<Class>(#Class)

注册类型(无基类)

参数
Class类名

在文件 reflect.hpp346 行定义.

◆ NEFORCE_REFLECT_REGISTER_DERIVED

#define NEFORCE_REFLECT_REGISTER_DERIVED ( Class,
Base )
值:
static auto _neforce_reflect_##Class = _NEFORCE reflect::reflect<Class>(#Class).template base<Base>()

注册类型(带基类)

参数
Class类名
Base基类名

在文件 reflect.hpp353 行定义.

◆ NEFORCE_REFLECT_RESOLVE_BASES

#define NEFORCE_REFLECT_RESOLVE_BASES ( )
值:
_NEFORCE reflect::registry::instance().resolve_all_bases()

统一解析所有待解析的基类引用

应在 main() 函数开始处调用,或在所有静态注册完成后调用。

在文件 reflect.hpp361 行定义.

◆ NEFORCE_REFLECT_SIGNAL

#define NEFORCE_REFLECT_SIGNAL ( sig_type,
name,
... )

标记信号成员

参数
sig_type信号类型(如 neforce::signal<int>
name信号成员名称
...信号参数类型列表(可选)

在类体内放置此宏标记信号成员变量。 扫描器会识别并生成信号注册代码。

在文件 reflect_macros.hpp66 行定义.

枚举类型说明

◆ container_kind

容器类型标识

枚举值
none 

非容器类型

sequential 

顺序容器

associative 

关联容器

在文件 type.hpp33 行定义.

◆ property_attr

属性注解标志

用于控制属性在序列化/反序列化中的行为。

枚举值
PROP_NONE 

无注解

PROP_TRANSIENT 

序列化时跳过此属性

PROP_REQUIRED 

反序列化时必须存在

PROP_READ_ONLY 

仅 getter,无 setter

PROP_OPTIONAL 

反序列化时可缺失

PROP_VERSIONED 

启用版本追踪

PROP_PRIMARY_KEY 

数据库主键列

PROP_AUTO_INC 

数据库自增列

PROP_UNIQUE 

数据库唯一约束

PROP_INDEX 

数据库普通索引

PROP_FOREIGN_KEY 

数据库外键列

在文件 property.hpp31 行定义.

函数说明

◆ prop_has_attr()

◆ reflect()

template<typename T, enable_if_t< is_class_v< T >, int > = 0>
type_builder< T > neforce::reflect::reflect ( string_view name)

创建类型反射构建器

模板参数
T要注册的类型
参数
name类型名称
返回
类型构建器
注解
枚举类型请直接使用 registry::instance().register_type<EnumType>(name) 并通过返回的 meta_type& 设置 enum_info

在文件 reflect.hpp337 行定义.

引用了 reflect().

被这些函数引用 reflect().

◆ swap()

void neforce::reflect::swap ( meta_any & lhs,
meta_any & rhs )
inlinenoexcept

交换两个 meta_any

参数
lhs左操作数
rhs右操作数

在文件 reflect/any.hpp530 行定义.