c++ typename
Have you ever tried to dynamically get the typename (like “int” or “char *”) of a variable? in g++ you will get some curios effects
type | typeid( type).name() |
---|---|
int |
i |
std::string |
Ss |
char * |
Pc |
std::vector<std::string> |
St6vectorISsSaISsEE |
These names are unique but they are not “human-readable”.
I wrote a small header file defining a template function resolving exactly this problem.
after including TypeName.h
you could write instead of
int i=5;
cout << typeid(i).name();
int i=5;
cout << typeName(i);
which is
- shorter and
- smarter 😉
It is a restriction of c++ that only commonly used types are checked (It is not possible to make it generic types). These could be easily extended.
Every one of the following types is currently checked with any combination of “(|const) type (|*|**|*&)” (RegExpr-like-syntax):
std::string
char
short
int
long
unsigned char
unsigned short
unsigned int
unsigned long
float
double
long double
void