From c8eaf4abe03dedf7134cb62b7b2d56c0f508f5c5 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 25 May 2022 22:54:14 +0300 Subject: [PATCH] Add util::dynamic_ptr with stream output operator that shows dynamic type of referenced object --- libs/util/include/psemek/util/type_name.hpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libs/util/include/psemek/util/type_name.hpp b/libs/util/include/psemek/util/type_name.hpp index cf91ff64..8b8a5ffe 100644 --- a/libs/util/include/psemek/util/type_name.hpp +++ b/libs/util/include/psemek/util/type_name.hpp @@ -21,4 +21,19 @@ namespace psemek::util return type_name(typeid(x)); } + template + struct dynamic_ptr + { + T * ptr; + }; + + template + auto & operator << (OStream & os, dynamic_ptr const & d) + { + if (!d.ptr) + return os << d.ptr; + else + return os << "<" << type_name(*d.ptr) << " " << d.ptr << ">"; + } + }