|
|
@@ -1,16 +1,37 @@ |
|
|
|
#pragma once |
|
|
|
|
|
|
|
#include <memory> |
|
|
|
|
|
|
|
#include "type_helper.h" |
|
|
|
|
|
|
|
namespace cppcore |
|
|
|
{ |
|
|
|
|
|
|
|
namespace __impl |
|
|
|
{ |
|
|
|
|
|
|
|
template<typename T> |
|
|
|
std::string get_type_name() |
|
|
|
{ |
|
|
|
using ptr_u = std::unique_ptr<char, decltype(&free)>; |
|
|
|
|
|
|
|
int status; |
|
|
|
ptr_u name( |
|
|
|
abi::__cxa_demangle(typeid(T).name(), 0, 0, &status), |
|
|
|
&free); |
|
|
|
|
|
|
|
return std::string(name |
|
|
|
? name.get() |
|
|
|
: typeid(T).name()); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
template<typename T> |
|
|
|
std::string type_helper<T>::name() |
|
|
|
const std::string& type_helper<T>::name() |
|
|
|
{ |
|
|
|
int status; |
|
|
|
auto name = abi::__cxa_demangle(typeid(T).name(), 0, 0, &status); |
|
|
|
return std::string(name ? name : typeid(T).name()); |
|
|
|
static auto value = __impl::get_type_name<T>(); |
|
|
|
return value; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|