C++ 如何改进C++;JSON序列化程序

C++ 如何改进C++;JSON序列化程序,c++,json,serialization,reflection,C++,Json,Serialization,Reflection,TLDR:如何改进我添加到类中的序列化方法,以避免使用JVALC宏 长话短说: 我用RAPIDJSON在C++中编写了JSON序列化程序/反序列化器来解析JSON本身和读写器类,以序列化到JSON。p> C++没有反射,我希望避免外部图元文件或预编译步骤,因此为了实现它,我必须为我想要序列化的每个类添加一个接口 注意:通过设计,我的类总是从和序列化到字符串缓冲区,这样我就可以避免serialize()方法中的错误检查 以下是简单的界面: class RJSerializer; struct S

TLDR:如何改进我添加到类中的序列化方法,以避免使用JVALC宏

长话短说:

我用RAPIDJSON在C++中编写了JSON序列化程序/反序列化器来解析JSON本身和读写器类,以序列化到JSON。p> C++没有反射,我希望避免外部图元文件或预编译步骤,因此为了实现它,我必须为我想要序列化的每个类添加一个接口

注意:通过设计,我的类总是从和序列化到字符串缓冲区,这样我就可以避免serialize()方法中的错误检查

以下是简单的界面:

class RJSerializer;

struct Serializable
{
    virtual void serialize(RJSerializer &) = 0;
    virtual ~Serializable() {}
};
方法serialize是我的问题的对象,实际上对于这样的对象:

struct Group : Serializable {
    long long id;
    std::string name;
    std::string type;
    bool internal;
    std::vector<Subgroup> subgroups;

    void serialize(RJSerializer &);
};
我的问题是JVAL使用丑陋的C风格宏实现了真正的“魔法”,我想对它做一点改进

#define JVAL(w, a) w.Pair(#a, a)

此方法将成员<强> A >强>关联到名称<强>“A”/强>,然后在RJiSeralSuver类中使用C++模板方法:

template <typename T>
void Pair(const char *k, T &v) { key(k); val(v); }
模板
空对(constchar*k,T&v){key(k);val(v);}

序列化过程的初始步骤是否。。。其余的都与你在这个星球上找到的二进制二进制C++串行化器类似……/P>如果我得到正确的,很少的设计信息,键入<代码> S.Buy(“ID”,ID)< /C> >有什么不对?因为C++没有反射,你必须使用一些宏来避免重复名称和变量。您可以查看如何在不继承的情况下向类添加反射。(我个人曾与和做过类似的事情)。
template <typename T>
void Pair(const char *k, T &v) { key(k); val(v); }