|
template <typename T>
struct type_descriptor<T*>
{
operator const char*()
{
static char name[MAXLEN_TYPE_DESCRIPTOR];
strcpy(name, "pointer to ");
strcat(name, type_descriptor<T>());
return name;
}
};
template <typename T>
struct type_descriptor<T&>
{
operator const char*()
{
static char name[MAXLEN_TYPE_DESCRIPTOR];
strcpy(name, "reference to ");
strcat(name, type_descriptor<T>());
return name;
}
};
template <typename T>
struct type_descriptor<T const>
{
operator const char*()
{
static char name[MAXLEN_TYPE_DESCRIPTOR];
strcpy(name, type_descriptor<T>());
strcat(name, " const");
return name;
}
};
template <typename T>
struct type_descriptor<T volatile>
{
operator const char*()
{
static char name[MAXLEN_TYPE_DESCRIPTOR];
strcpy(name, type_descriptor<T>());
strcat(name, " volatile");
return name;
}
};
template <typename T>
struct type_descriptor<T[]>
{
operator const char*()
{
static char name[MAXLEN_TYPE_DESCRIPTOR];
strcpy(name, "array of ");
strcat(name, type_descriptor<T>());
return name;
}
};
template <typename R>
struct type_descriptor<R (*)()>
{
operator const char*()
{
static char name[MAXLEN_TYPE_DESCRIPTOR];
strcpy(name, "pointer to function returning ");
strcat(name, type_descriptor<R>());
return name;
}
};
template <typename R, typename A>
struct type_descriptor<R (*)(A)>
{
operator const char*()
{
static char name[MAXLEN_TYPE_DESCRIPTOR];
strcpy(name, "pointer to function with ");
strcat(name, type_descriptor<A>());
strcat(name, " returning ");
strcat(name, type_descriptor<R>());
return name;
}
};
|