jsoncpp を使用して JSON 文字列を操作しています。文字列を Json::Value に解析した後、ネストされたオブジェクトの 1 つにアクセスし、存在する場合は変更する可能性があります。ネストされたオブジェクトが存在しない場合は、作成したくありません。
json のドキュメントを見ると、オブジェクトへの参照を返す唯一の方法は operator[] を使用することです。
Value& operator[] (const char *key)
名前でオブジェクト値にアクセスし、存在しない場合は null メンバーを作成します。
const Value& operator[] (const char *key) const
名前でオブジェクト値にアクセスし、その名前のメンバーが存在しない場合は null を返します。
これらの両方のセマンティクスを組み合わせたものが必要です。変更可能な参照が必要ですが、オブジェクトがまだ存在しない場合は作成する必要はありません。(Json::Value インターフェースがこのように設計されている理由を理解しています。変更可能な参照を返すと、内部の null オブジェクトが公開されます。)
私が見ることができる唯一のきれいな方法は、Json::Value::isMember を使用してオブジェクトが存在するかどうかを判断し、次に Value& operator[] を使用してオブジェクトにアクセスすることです。しかし、これには 1 回ではなく 2 回の O( log N ) ルックアップが含まれるので、避けたいと思うかもしれません。
醜いconst_castを除いて、私が望むことを行う賢明な方法はありますか?