Protobuf字段反射辅助工具类
More...
#include <tools_pb_field.h>
|
| static void | copy (const google::protobuf::Message &src, google::protobuf::Message *dst, const std::map< i32_fieldnumber, epb_field > &fieldsrc, const std::map< i32_fieldnumber, epb_field > &fielddst, bool amessage) |
| | 将src中指定字段拷贝到dst(字段映射版本)
|
| static void | copy (const google::protobuf::Message &src, google::protobuf::Message *dst, const std::map< i32_fieldnumber, epb_field > &fieldsrc, bool amessage) |
| | 将src中指定字段拷贝到dst(单映射版本)
|
| template<typename T> |
| static std::set< i32_fieldnumber > & | field_number (std::set< i32_fieldnumber > &afieldset) |
| | 获取字段编号集合(空版本)
|
| template<typename T> |
| static std::set< i32_fieldnumber > & | field_number (std::set< i32_fieldnumber > &afieldset, const char *afieldname) |
| | 根据字段名称获取字段编号
|
| template<typename T, typename ... TARGS> |
| static std::set< i32_fieldnumber > & | field_number (std::set< i32_fieldnumber > &afieldset, TARGS... args) |
| | 根据多个字段名称获取字段编号
|
| template<typename T> |
| static void | field_numbers (std::map< i32_fieldnumber, std::string > &afieldmap) |
| | 获取字段编号到名称的映射
|
| template<typename T> |
| static void | field_numbers (std::set< i32_fieldnumber > &afieldset) |
| | 获取字段编号集合
|
Protobuf字段反射辅助工具类
提供Protobuf消息的字段级操作,包括:
- 按字段编号选择性拷贝
- 字段编号与名称的映射查询
- 支持基础类型、repeated字段和嵌套消息类型
- Note
- 所有方法均为静态方法。
MyMessage src, dst;
std::map<int, ngl::tools::epb_field> field_map;
field_map[1] = ngl::tools::epb_field::some_field;
std::map<int, std::string> field_map;
ngl::tools::pb_field::field_numbers<MyMessage>(field_map);
◆ copy() [1/2]
| void ngl::tools::tools::pb_field::copy |
( |
const google::protobuf::Message & | src, |
|
|
google::protobuf::Message * | dst, |
|
|
const std::map< i32_fieldnumber, epb_field > & | fieldsrc, |
|
|
bool | amessage ) |
|
static |
将src中指定字段拷贝到dst(单映射版本)
按字段映射拷贝Protobuf消息(单映射版本)
- Parameters
-
| src | 源消息 |
| dst | 目标消息指针 |
| fieldsrc | 源字段映射表 |
| amessage | 是否为消息类型,消息类型需要处理mid字段 |
拷贝源端映射中所有存在的字段
- Parameters
-
| src | 源消息 |
| dst | 目标消息指针 |
| fieldsrc | 源端字段映射 |
| amessage | 是否为消息类型(处理epb_mid字段) |
◆ copy() [2/2]
| void ngl::tools::tools::pb_field::copy |
( |
const google::protobuf::Message & | src, |
|
|
google::protobuf::Message * | dst, |
|
|
const std::map< i32_fieldnumber, epb_field > & | fieldsrc, |
|
|
const std::map< i32_fieldnumber, epb_field > & | fielddst, |
|
|
bool | amessage ) |
|
static |
将src中指定字段拷贝到dst(字段映射版本)
按字段映射拷贝Protobuf消息(双映射版本)
- Parameters
-
| src | 源消息 |
| dst | 目标消息指针 |
| fieldsrc | 源字段映射表 |
| fielddst | 目标字段映射表 |
| amessage | 是否为消息类型,消息类型需要处理mid字段 |
根据源和目标字段映射,仅拷贝源端为write且目标端存在的字段
- Parameters
-
| src | 源消息 |
| dst | 目标消息指针 |
| fieldsrc | 源端字段映射(字段号 -> 字段类型) |
| fielddst | 目标端字段映射 |
| amessage | 是否为消息类型(处理epb_mid字段) |
◆ field_number() [1/3]
获取字段编号集合(空版本)
- Template Parameters
-
- Parameters
-
- Returns
- 字段编号集合引用
◆ field_number() [2/3]
根据字段名称获取字段编号
- Template Parameters
-
- Parameters
-
| afieldset | 字段编号集合 |
| afieldname | 字段名称 |
- Returns
- 字段编号集合引用
◆ field_number() [3/3]
template<typename T, typename ... TARGS>
根据多个字段名称获取字段编号
- Template Parameters
-
| T | Protobuf消息类型 |
| TARGS | 字段名称参数类型 |
- Parameters
-
| afieldset | 字段编号集合 |
| args | 字段名称参数包 |
- Returns
- 字段编号集合引用
使用折叠表达式批量处理多个字段名称。
◆ field_numbers() [1/2]
template<typename T>
| void ngl::tools::pb_field::field_numbers |
( |
std::map< i32_fieldnumber, std::string > & | afieldmap | ) |
|
|
inlinestatic |
获取字段编号到名称的映射
- Template Parameters
-
- Parameters
-
◆ field_numbers() [2/2]
template<typename T>
| void ngl::tools::pb_field::field_numbers |
( |
std::set< i32_fieldnumber > & | afieldset | ) |
|
|
inlinestatic |
获取字段编号集合
- Template Parameters
-
- Parameters
-
The documentation for this class was generated from the following files: