我希望在编译时使用类型名称。例如,假设我已经写了以下代码:
constexpr size_t my_strlen(const char* s)
{
const char* cp = s;
while(*cp != '\0') { cp++; };
return cp - s;
}
现在我希望拥有:
template <typename T>
constexpr auto type_name_length = my_strlen(typeid(T).name());
然而,遗憾的是,typeid(T).name()
只是 const char*
,不是 constexpr...是否有其他constexpr的方法可以获取类型名称?
type_name_length<T>
做什么呢?编译器通常很擅长评估strlen()
并在可能的情况下给出一个常量。 - Barry