快速序列化宏
版本3.9.0(2020)
namespace ns { struct HardWare { int index = 1; std::string type = "AMD"; std::string version = "0.0.1"; }; NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(HardWare, index, type, version)
struct Device { std::vector<HardWare> hardwarelist; }; NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Device, hardwarelist) } namespace ns { class address { private: std::string street; int housenumber; int postcode;
public: NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(address, street, housenumber, postcode) }; }
|
-
NLOHMANN_DEFINE_TYPE_INTRUSIVE(name, member1, member2, ...)
这个宏需要定义在结构体之内,它可以访问结构体/类的私有成员。
-
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(name, member1, member2, ...)
这个宏需要定义在结构体之外,但需要和结构体在同一个命名空间,但不能访问结构体的私有成员,因此被序列化的字段都需要定义成public。
所以,如果你的类没有私有成员,用NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
就行了。如果你的类区分了私有成员和公有成员,用NLOHMANN_DEFINE_TYPE_INTRUSIVE
就行了。
这两个宏后面带有 WITH_DEFAULT
的宏的意思是当字段不存在,是否使用默认值填充。