#pragma once #include #include #define NAME(u) #u #define INT32_SAVE(varx, obj) obj[NAME(varx)] = varx; #define INT32_PEAK(varx, obj) varx = obj[NAME(varx)].toInt(); #define STRLIST_SAVE(list, obj) obj[NAME(list)] = list.join(";"); #define STRLIST_PEAK(list, obj) list = obj[NAME(list)].toString().split(";"); #define STRING_PEAK(codec_name, obj) codec_name = obj[NAME(codec_name)].toString(); #define STRING_SAVE(codec_name, obj) obj[NAME(codec_name)] = codec_name; #define OBJECT_SAVE(objn, obj) obj[NAME(objn)] = objn; #define OBJECT_PEAK(objn, obj) objn = obj[NAME(objn)].toObject(); #define ARRAY_SAVE(objn, obj) obj[NAME(objn)] = objn; #define ARRAY_PEAK(objn, obj) objn = obj[NAME(objn)].toArray(); class TranslateBasic; /// /// 序列化实体 /// class Serializable { public: virtual ~Serializable() = default; /// /// 反序列化 /// /// virtual void loadFrom(std::shared_ptr core, const QJsonObject& obj) = 0; /// /// 序列化 /// /// virtual void saveTo(QJsonObject& obj) const = 0; /// /// 创建默认副本 /// /// virtual std::shared_ptr newDefault() const = 0; }; /// /// 内部使用的数据类型 /// enum class DataType { TextString, Integer, // 整形 Unsigned,// 无符号整形 Flt32, Dbl64, LIST_COLLECTION, UNION_COMBINATE, SUB_RULE, };