31#ifndef DRAIN_TYPE_NAME
32#define DRAIN_TYPE_NAME
57 const std::string &
str();
60 operator const std::string & ()
const{
70 const std::string name(
typeid(T).name());
82std::ostream & operator<<(std::ostream & ostr,
const TypeName<T> &t){
91#define DRAIN_TYPENAME(tname) template <> inline const std::string & drain::TypeName<tname>::str(){static const std::string n(#tname); return n;}
93#define DRAIN_TYPENAME_t(tname) template <> inline const std::string & drain::TypeName<tname##_t>::str(){static const std::string n(#tname); return n;}
96#define DRAIN_TYPENAME_T(cname,T) template <class T> struct TypeName<cname<T> > {static const std::string & str(){static const std::string n=std::string(#cname)+'<'+drain::TypeName<T>::str()+'>'; return n;}}
102DRAIN_TYPENAME_t(int8);
103DRAIN_TYPENAME_t(uint8);
104DRAIN_TYPENAME_t(int16);
105DRAIN_TYPENAME_t(uint16);
106DRAIN_TYPENAME_t(int32);
107DRAIN_TYPENAME_t(uint32);
108DRAIN_TYPENAME_t(int64);
109DRAIN_TYPENAME_t(uint64);
113DRAIN_TYPENAME(
float);
114DRAIN_TYPENAME(
double);
116DRAIN_TYPENAME(
char *);
117DRAIN_TYPENAME(
const char *);
118DRAIN_TYPENAME(std::string);
121DRAIN_TYPENAME_T(std::initializer_list, T);
122DRAIN_TYPENAME_T(std::vector, T);
141 typedef std::string value_t;
148 template <
class S,
class T>
Returns the basic type (integer, float, bool, string, void) as a string.
Definition TypeName.h:137
static T callback()
Definition TypeName.h:150
Default implementation.
Definition TypeName.h:54
static const std::string & str()
Default implementation: name returned by std::type_info::name()
Definition TypeName.h:68