Зерновая альтернатива методу startNode - PullRequest
0 голосов
/ 06 апреля 2020

Я использую зерновые с c ++ для сериализации и десериализации JSON. Все мои Json объекты имеют базовый класс, такого рода сопоставления с JSON, например, так ...

["baseclass_var1", "baseclass_var2", 21321, {"derived_object_var1":"blah", "derived_object_var2":"blahblah"}]

Производный класс добавляет объект JSON в конце этого JSON массив и базовый класс вносят значения в массив.

Мои классы выглядят примерно так:

struct baseObject
{
    baseObject() 
    {
    }

    template<typename Archive>
    void serialize(Archive& archive)
    {
        archive.makeArray();
        archive("baseclass_var1", "baseclass_var2", 21321);
    }
};

struct derivedObject : baseObject
{
    template<typename Archive>
    void serialize(Archive& archive)
    {
        baseObject::serialize(archive);
        archive.startNode();
        cereal::nvp(archive, "derived_object_var1", "blah");
        cereal::nvp(archive, "derived_object_var2", "blahblah");
        archive.finishNode();
    }
}

Я не могу не думать о том, насколько легко использовать злаки где структура JSON неявно определена, я мог бы ошибиться, вызвав явный вызов startNode(), finishNode() и makeArray()? Есть ли альтернативная реализация, которая позаботилась бы о структуре JSON для меня, без необходимости явно указывать, где я хочу расположить подузел?

...