Я использую socket.io-clientpp, https://github.com/ebshimizu/socket.io-clientpp, который использует quickjson.
Когда событие получено, моя функция называется:
void data_published(socketio::socketio_events&, const Value& v) {
Значение является быстрым значением. Моя проблема состоит в том, что единственный способ, которым я вижу, чтобы привести это в соответствие, с классом Document.
Но чтобы поместить значение в документ, все функции используют неконстантную ссылку, например:
GenericValue& AddMember(const Ch* name, GenericValue& value, Allocator& allocator) {
Я привык к jsonpp, мне не хватает чего-то глупого, я думаю.
Вопрос прост: как упорядочить значение const rapidjson?
Я являюсь автором fastjson. Спасибо Вам за Ваш вопрос. Я записал это для выпуска в http://code.google.com/p/rapidjson/issues/detail?id=45
Это связано с тем, что GenericValue :: Accept () не является const.
Поскольку GenericValue :: Accept () просто генерирует события для обработчика, ему не нужно изменять значение и его потомки. Так что это должно измениться с:
template <typename Handler>
GenericValue& Accept(Handler& handler)
в
template <typename Handler>
const GenericValue& Accept(Handler& handler) const
Вы можете исправить это в своем quickjson / document.h или загрузить последнюю версию (транк или ветка 0.1x).
После этого изменения вы можете stringfy const Value как в учебнике:
const Value& v = ...;
FileStream f(stdout);
PrettyWriter<FileStream> writer(f);
v.Accept(writer);
Или в строковый буфер:
const Value& v = ...;
StringBuffer buffer;
PrettyWriter<StringBuffer> writer(buffer);
v.Accept(writer);
const char* json = buffer.GetString();
Других решений пока нет …