Тем не менее, мне кажется, что создание новых автономных узлов на лету и их вставка в дерево в памяти, по крайней мере, должны быть простыми.
Я бы хотел сделать это (и я посмотрел на JsonCpp здесь), но есть три проблемы:
Существует разница между YAML и JSON: YAML различает нулевой узел и несуществующий узел.
Текущее поведение yaml-cpp - генерировать исключение при запросе несуществующего узла.
В YAML отображения могут иметь произвольные ключи.
Для проблемы # 2 это означает, что, скорее всего, нам придется (в основном!) Нарушить текущее поведение, что заставляет меня колебаться нажимать на курок.
Например, в JsonCpp, когда вы пишете
root["encoding"];
создаст для вас узел по умолчанию, если он не существует. В yaml-cpp будет выброшено исключение, если оно не существует. Люди могут полагаться на код, который выглядит следующим образом:
try {
root["encoding"]; // etc
catch(const YAML::Exception&) {
// does not exist
}
Наконец, для проблемы # 3, как бы вы указали ключ, который является отображением? И если кто-то написал
root[1] = 5;
будет ли это создавать экземпляр root
как последовательность с нулевым первым элементом или отображение с одной парой ключ / значение {1, 5}
? Если это последнее (что кажется более естественным), то
root[0] = 3;
root[1] = 5;
и
root[1] = 5;
root[0] = 3;
будет иметь другое поведение, которое будет нелогичным.
По сути, суть в том, что я думал об этом, но я не смог придумать достаточно хороший API для этого. Я хотел бы сделать это, поэтому, если у вас есть какие-либо мысли, пожалуйста, дайте мне знать.
Тем не менее, я не уверен, что stackoverflow - лучшее место для такого обсуждения (я написал это на сайте yaml-cpp, потому что многие люди публиковали практические вопросы в вики) - так что не стесняйтесь чтобы отправить мне письмо (оно на моей странице пользователя).