Skip to content

Commit 2010430

Browse files
committed
Added convert adaptor support.
1 parent 428780d commit 2010430

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

include/msgpack/adaptor/cpp11/reference_wrapper.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ MSGPACK_API_VERSION_NAMESPACE(v1) {
3333

3434
namespace adaptor {
3535

36+
template <typename T>
37+
struct convert<std::reference_wrapper<T>> {
38+
msgpack::object const& operator()(msgpack::object const& o, std::reference_wrapper<T>& v) const {
39+
msgpack::adaptor::convert<T>()(o, v.get());
40+
return o;
41+
}
42+
};
43+
3644
template <typename T>
3745
struct pack<std::reference_wrapper<T>> {
3846
template <typename Stream>

test/reference_wrapper_cpp11.cpp

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@
88

99
#if !defined(MSGPACK_USE_CPP03)
1010

11-
TEST(MSGPACK_REFERENCE_WRAPPER, pack)
11+
TEST(MSGPACK_REFERENCE_WRAPPER, pack_convert)
1212
{
1313
int i1 = 42;
1414
std::reference_wrapper<int> val1(i1);
1515
std::stringstream ss;
1616
msgpack::pack(ss, val1);
1717
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
18-
int i2= oh.get().as<int>();
19-
EXPECT_EQ(val1, i2);
18+
int i2 = 0;
19+
std::reference_wrapper<int> val2(i2);
20+
oh.get().convert(val2);;
2021
EXPECT_EQ(i1, i2);
2122
}
2223

@@ -37,29 +38,21 @@ TEST(MSGPACK_REFERENCE_WRAPPER, object)
3738
int i1 = 42;
3839
std::reference_wrapper<int> val1(i1);
3940
msgpack::object o(val1);
40-
int i2= o.as<int>();
41-
EXPECT_EQ(val1, i2);
41+
int i2 = 0;
42+
std::reference_wrapper<int> val2(i2);
43+
o.convert(val2);
4244
EXPECT_EQ(i1, i2);
4345
}
4446

4547
TEST(MSGPACK_REFERENCE_WRAPPER, object_with_zone)
46-
{
47-
int i1 = 42;
48-
std::reference_wrapper<int> val1(i1);
49-
msgpack::zone z;
50-
msgpack::object o(val1, z);
51-
int i2= o.as<int>();
52-
EXPECT_EQ(val1, i2);
53-
EXPECT_EQ(i1, i2);
54-
}
55-
56-
TEST(MSGPACK_REFERENCE_WRAPPER, object_with_zone_string)
5748
{
5849
std::string s1 = "ABC";
5950
std::reference_wrapper<std::string> val1(s1);
6051
msgpack::zone z;
6152
msgpack::object o(val1, z);
62-
std::string s2= o.as<std::string>();
53+
std::string s2 = "DE";
54+
std::reference_wrapper<std::string> val2(s2);
55+
o.convert(val2);
6356
EXPECT_EQ(s1, s2);
6457
}
6558

0 commit comments

Comments
 (0)