From 9d4da1ad2e90aa5ae325a92783abfcee286fa773 Mon Sep 17 00:00:00 2001 From: David Chappelle Date: Fri, 15 May 2015 16:21:54 -0400 Subject: [PATCH] Object conversions return the specific type that was converted. This allows us to easily make function calls that have parameters that are dependent upon converting from msgpack objects to concrete types. For example: void process_args(std::tuple& args) { ... } process_args(obj.convert(std::make_tuple(100,"hello"))) You can get similar behavior by using obj.as<...>() but its performance is highly dependent upon the specific compiler and whether or not r-value references are supported. --- include/msgpack/object.hpp | 6 ++++-- include/msgpack/object_fwd.hpp | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/msgpack/object.hpp b/include/msgpack/object.hpp index 03dd8689..ee207122 100644 --- a/include/msgpack/object.hpp +++ b/include/msgpack/object.hpp @@ -386,15 +386,17 @@ inline msgpack::object::implicit_type object::convert() const } template -inline void object::convert(T& v) const +inline T& object::convert(T& v) const { msgpack::operator>>(*this, v); + return v; } template -inline void object::convert(T* v) const +inline T* object::convert(T* v) const { convert(*v); + return v; } template diff --git a/include/msgpack/object_fwd.hpp b/include/msgpack/object_fwd.hpp index 21483bc4..ffcc7db5 100644 --- a/include/msgpack/object_fwd.hpp +++ b/include/msgpack/object_fwd.hpp @@ -106,9 +106,9 @@ struct object { T as() const; template - void convert(T& v) const; + T& convert(T& v) const; template - void convert(T* v) const; + T* convert(T* v) const; object();