ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
ngl::tools::pb_field Class Reference

Protobuf字段反射辅助工具类 More...

#include <tools_pb_field.h>

Static Public Member Functions

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)
 获取字段编号集合

Detailed Description

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;
    ngl::tools::pb_field::copy(src, &dst, field_map, true);
    // 获取字段编号示例
    std::map<int, std::string> field_map;
    ngl::tools::pb_field::field_numbers<MyMessage>(field_map);

Member Function Documentation

◆ 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<typename T>
std::set< i32_fieldnumber > & ngl::tools::pb_field::field_number ( std::set< i32_fieldnumber > & afieldset)
inlinestatic

获取字段编号集合(空版本)

Template Parameters
TProtobuf消息类型
Parameters
afieldset字段编号集合
Returns
字段编号集合引用

◆ field_number() [2/3]

template<typename T>
std::set< i32_fieldnumber > & ngl::tools::pb_field::field_number ( std::set< i32_fieldnumber > & afieldset,
const char * afieldname )
inlinestatic

根据字段名称获取字段编号

Template Parameters
TProtobuf消息类型
Parameters
afieldset字段编号集合
afieldname字段名称
Returns
字段编号集合引用

◆ field_number() [3/3]

template<typename T, typename ... TARGS>
std::set< i32_fieldnumber > & ngl::tools::pb_field::field_number ( std::set< i32_fieldnumber > & afieldset,
TARGS... args )
inlinestatic

根据多个字段名称获取字段编号

Template Parameters
TProtobuf消息类型
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
TProtobuf消息类型
Parameters
afieldmap输出映射表

◆ field_numbers() [2/2]

template<typename T>
void ngl::tools::pb_field::field_numbers ( std::set< i32_fieldnumber > & afieldset)
inlinestatic

获取字段编号集合

Template Parameters
TProtobuf消息类型
Parameters
afieldset输出字段编号集合

The documentation for this class was generated from the following files: