7

私は、rapidjsonを使用するhttps://github.com/ebshimizu/socket.io-clientppの socket.io-clientppを使用しています。

イベントが受信されると、私の関数が呼び出されます:

void data_published(socketio::socketio_events&, const Value& v) {

値は、rapidjson 値です。私の問題は、文字列化する唯一の方法は Document クラスを使用することです。ただし、値をドキュメントに入れるには、すべての関数が非 const 参照を取ります。次に例を示します。

GenericValue& AddMember(const Ch* name, GenericValue& value, Allocator& allocator) {

私はjsonppに慣れていますが、私が推測するばかげた何かが欠けています。質問は簡単です: const rapidjson 値を文字列化する方法は?

4

1 に答える 1

17

私はrapidjsonの作者です。ご質問ありがとうございます。これを記録してhttp://code.google.com/p/rapidjson/issues/detail?id=45に発行しました

GenericValue::Accept() が非定数であるためです。

GenericValue::Accept() はハンドラのイベントを生成するだけなので、値とその子孫を変更する必要はありません。したがって、次のように変更する必要があります。

template <typename Handler>
GenericValue& Accept(Handler& handler)

template <typename Handler>
const GenericValue& Accept(Handler& handler) const

これを Rapidjson/document.h にパッチするか、最新バージョン (トランクまたは 0.1x ブランチ) をダウンロードできます。

この変更の後、チュートリアルのように const 値を文字列化できます。

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();
于 2012-11-14T07:30:12.160 に答える