MsgPack の C API で、キー (たとえば、msgpack_object_kv のキー フィールド) が msgpack_object 型であるのはなぜですか?
https://github.com/msgpack/msgpack-c/blob/master/src/msgpack/object.h
msgpack_object_raw だけではないのはなぜですか? それらはどのタイプでもかまいませんか?
MsgPack の C API で、キー (たとえば、msgpack_object_kv のキー フィールド) が msgpack_object 型であるのはなぜですか?
https://github.com/msgpack/msgpack-c/blob/master/src/msgpack/object.h
msgpack_object_raw だけではないのはなぜですか? それらはどのタイプでもかまいませんか?
それらはどのタイプでもかまいませんか?
はい。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
です。