|
|
@@ -18,15 +18,19 @@ namespace logging { namespace detail {
|
|
|
public:
|
|
|
template <typename T> explicit object(T & object);
|
|
|
|
|
|
+ std::string json() const { return to_json_(ptr_); }
|
|
|
+
|
|
|
private:
|
|
|
friend std::ostream & operator<<(std::ostream & os, object const & obj) {
|
|
|
return os << obj.to_string_(obj.ptr_);
|
|
|
}
|
|
|
template <typename> static std::string to_string_impl(void * ptr);
|
|
|
+ template <typename> static std::string to_json_impl(void * ptr);
|
|
|
|
|
|
private:
|
|
|
void * ptr_;
|
|
|
std::string (*to_string_)(void*);
|
|
|
+ std::string (*to_json_)(void*);
|
|
|
};
|
|
|
|
|
|
|
|
|
@@ -34,11 +38,17 @@ namespace logging { namespace detail {
|
|
|
std::string object::to_string_impl(void * ptr) {
|
|
|
return to_string(*static_cast<T*>(ptr));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ template <typename T>
|
|
|
+ std::string object::to_json_impl(void * ptr) {
|
|
|
+ return to_json(*static_cast<T*>(ptr));
|
|
|
+ }
|
|
|
+
|
|
|
template <typename T>
|
|
|
object::object(T & object)
|
|
|
: ptr_(&object),
|
|
|
- to_string_(&object::to_string_impl<T>) {
|
|
|
+ to_string_(&object::to_string_impl<T>),
|
|
|
+ to_json_(&object::to_json_impl<T>) {
|
|
|
|
|
|
}
|
|
|
} }
|