ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
xml_serialize.h File Reference

XML序列化辅助工具 More...

#include "tinyxml2.h"
#include <functional>
#include <algorithm>
#include <ranges>
#include <vector>
#include <string>
#include <list>
#include <set>
#include <map>
#include "tools/serialize/ndefine.h"

Classes

class  ngl::xml
 XML操作工具类 More...
struct  ngl::xml_serialize< ATTR, T >
 XML序列化模板 More...
struct  ngl::xml_serialize< ATTR, T * >
 XML序列化指针特化 More...
struct  ngl::xbtype< ATTR >
 基础类型序列化辅助 More...
struct  ngl::xml_serialize< ATTR, int8_t >
struct  ngl::xml_serialize< ATTR, int16_t >
struct  ngl::xml_serialize< ATTR, int32_t >
struct  ngl::xml_serialize< ATTR, int64_t >
struct  ngl::xml_serialize< ATTR, uint8_t >
struct  ngl::xml_serialize< ATTR, uint16_t >
struct  ngl::xml_serialize< ATTR, uint32_t >
struct  ngl::xml_serialize< ATTR, uint64_t >
struct  ngl::xml_serialize< ATTR, std::string >
struct  ngl::xml_serialize< ATTR, std::vector< T > >
struct  ngl::xml_serialize< ATTR, std::list< T > >
struct  ngl::xml_serialize< ATTR, std::set< T > >
struct  ngl::xml_serialize< ATTR, std::map< TKEY, TVALUE, TCOMP, TALLOC > >
class  ngl::xserialize< ATTR >

Macros

#define DEF_XMLFUNCTION(XMLNAME)
#define DEF_XML(ATTR, ...)
#define DXMLSERIALIZE(XMLNAME, ATTR, ...)

Detailed Description

XML序列化辅助工具

提供XML配置文件的读写功能,支持:

  • 基础数据类型(整数、浮点数、字符串)
  • 容器类型(vector、list、set、map)
  • 嵌套结构体和枚举类型
  • XML属性和子元素的读写
  • 自动序列化宏
    Note
    所有类和函数均位于 ngl 命名空间下。
    // 定义可序列化的结构体
    struct MyConfig {
    int m_id;
    std::string m_name;
    DXMLSERIALIZE(MyConfig, true, m_id, m_name)
    };
    // 读取XML配置
    MyConfig config;
    tinyxml2::XMLDocument doc;
    ngl::xml::readxml("config.xml", doc);
    config.xml_pop(doc.FirstChildElement("MyConfig"));
    // 写入XML配置
    config.xml_push("config.xml");

Macro Definition Documentation

◆ DEF_XML

#define DEF_XML ( ATTR,
... )
Value:
inline bool xml_pop(tinyxml2::XMLElement* aele) \
{ \
return ngl::xserialize<ATTR>::pop(aele, parms() __VA_OPT__(, )__VA_ARGS__); \
} \
inline bool xml_push(tinyxml2::XMLElement* aele)const \
{ \
return ngl::xserialize<ATTR>::push(aele, parms() __VA_OPT__(, )__VA_ARGS__); \
}

◆ DEF_XMLFUNCTION

#define DEF_XMLFUNCTION ( XMLNAME)
Value:
inline bool xml_pop(const char* axml) \
{ \
tinyxml2::XMLDocument ldocument; \
if (!ngl::xml::readxml(axml, ldocument)) \
{ \
return false; \
} \
tinyxml2::XMLElement* lelement = ngl::xml::get_child(ldocument, #XMLNAME); \
if (lelement == nullptr) \
{ \
return false; \
} \
return xml_pop(lelement); \
} \
inline bool xml_push(const char* axml)const \
{ \
tinyxml2::XMLDocument ldocument; \
tinyxml2::XMLElement* lelement = xml::set_child(ldocument, #XMLNAME); \
if (!xml_push(lelement)) \
{ \
return false; \
} \
return xml::writexml(axml, ldocument); \
}

◆ DXMLSERIALIZE

#define DXMLSERIALIZE ( XMLNAME,
ATTR,
... )
Value:
DEF_PARMNAME_(true, __VA_ARGS__) \
DEF_XMLFUNCTION(XMLNAME) \
DEF_XML(ATTR __VA_OPT__(, )__VA_ARGS__)