Supported any names for MSGPACK_DEFINE_MAP using MSGPACK_NVP.

This commit is contained in:
Takatoshi Kondo 2016-10-30 16:25:19 +09:00
parent c30962da25
commit e61cd76310
2 changed files with 31 additions and 0 deletions

View File

@ -42,6 +42,7 @@
} }
#define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this))) #define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this)))
#define MSGPACK_NVP(name, value) (name) (value)
#define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \ #define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \
MSGPACK_PP_IF( \ MSGPACK_PP_IF( \

View File

@ -537,3 +537,33 @@ TEST(MSGPACK_USER_DEFINED, test_non_intrusive)
EXPECT_EQ(t1.name(), t2.name()); EXPECT_EQ(t1.name(), t2.name());
} }
struct nvp_base {
int a;
int b;
MSGPACK_DEFINE_MAP(MSGPACK_NVP("aaa", a), b);
};
struct nvp_derived : nvp_base {
int c;
std::string d;
MSGPACK_DEFINE_MAP(MSGPACK_NVP("ccc", c), MSGPACK_NVP("base", MSGPACK_BASE(nvp_base)), MSGPACK_NVP("ddd", d));
};
TEST(MSGPACK_NVP, combination)
{
msgpack::sbuffer sbuf;
nvp_derived d1;
d1.a = 1;
d1.b = 2;
d1.c = 3;
d1.d = "ABC";
msgpack::pack(sbuf, d1);
msgpack::object_handle oh = msgpack::unpack(sbuf.data(), sbuf.size());
nvp_derived d2 = oh.get().as<nvp_derived>();
EXPECT_EQ(d2.a, 1);
EXPECT_EQ(d2.b, 2);
EXPECT_EQ(d2.c, 3);
EXPECT_EQ(d2.d, "ABC");
}