0

MsgPack の C API で、キー (たとえば、msgpack_object_kv のキー フィールド) が msgpack_object 型であるのはなぜですか?

https://github.com/msgpack/msgpack-c/blob/master/src/msgpack/object.h

msgpack_object_raw だけではないのはなぜですか? それらはどのタイプでもかまいませんか?

4

1 に答える 1

0

それらはどのタイプでもかまいませんか?

はい。msgpack_objectキーが-sとして表されるのはまさにそのためです。

マップ形式の仕様を見ると、マップはN= マップ内のペアの数によって定義されていることがわかります。

奇数要素がキーで、キーの次の要素がその関連値です

したがって、キーにはどんな種類のオブジェクトでも自由に使用できます。

の例 (2 ペアで作成されたマップ) を次に示しますtest/msgpackc_test.cpp

unsigned int map_size = 2;
/* ... */
msgpack_pack_map(&pk, map_size);
msgpack_pack_true(&pk);
msgpack_pack_false(&pk);
msgpack_pack_int(&pk, 10);
msgpack_pack_int(&pk, -10);

ご覧のとおり、最初のキーは aMSGPACK_OBJECT_BOOLEANで、2 番目のキーはMSGPACK_OBJECT_POSITIVE_INTEGERです。

于 2012-11-04T13:00:54.067 に答える