我想在编译时使用类型的名称。例如,假设我写过:
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 方法来获取类型的名称吗?
原文由 einpoklum 发布,翻译遵循 CC BY-SA 4.0 许可协议
编辑: 根据对非 constexpr 特定问题的 答案 进行更新;这是包括@HowardHinnant、@康桓玮、@Val 和我自己在内的几个人改进的结果。
据我所知,语言标准没有提供任何获取类型名称的工具。因此,我们求助于特定于编译器的方法。这适用于 GCC、clang 和 MSVC。