diff --git a/example/cpp03/class_non_intrusive.cpp b/example/cpp03/class_non_intrusive.cpp index b3bbb8bd..7bd6394b 100644 --- a/example/cpp03/class_non_intrusive.cpp +++ b/example/cpp03/class_non_intrusive.cpp @@ -14,10 +14,10 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { -object const& operator>> (object const& o, my_class& v); +object const& operator>> (msgpack::object const& o, my_class& v); template -packer& operator<< (packer& o, my_class const& v); +packer& operator<< (msgpack::packer& o, my_class const& v); } // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) } // namespace msgpack @@ -30,15 +30,19 @@ public: // my_class should be default constractible. my_class(std::string const& name, int age):name_(name), age_(age) {} - // When you want to define a non-intrusive adaptor functions, - // member variables should be public. + // my_class should provide getters for the data members you want to pack. + std::string get_name() const { return name_; } + int get_age() const { return age_; } + + friend bool operator==(my_class const& lhs, my_class const& rhs) { + return lhs.name_ == rhs.name_ && lhs.age_ == rhs.age_; + } + +private: std::string name_; int age_; }; -inline bool operator==(my_class const& lhs, my_class const& rhs) { - return lhs.name_ == rhs.name_ && lhs.age_ == rhs.age_; -} // definitions @@ -46,21 +50,22 @@ namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { -inline object const& operator>> (object const& o, my_class& v) { +inline object const& operator>> (msgpack::object const& o, my_class& v) { if (o.type != msgpack::type::ARRAY) throw msgpack::type_error(); if (o.via.array.size != 2) throw msgpack::type_error(); - o.via.array.ptr[0].convert(v.name_); - o.via.array.ptr[1].convert(v.age_); + v = my_class( + o.via.array.ptr[0].as(), + o.via.array.ptr[1].as()); return o; } template -inline packer& operator<< (packer& o, my_class const& v) { +inline packer& operator<< (msgpack::packer& o, my_class const& v) { // packing member variables as an array. o.pack_array(2); - o.pack(v.name_); - o.pack(v.age_); + o.pack(v.get_name()); + o.pack(v.get_age()); return o; }