快速序列化宏

快速序列化宏

版本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的宏的意思是当字段不存在,是否使用默认值填充。