Chciałbym użyć nazwy typu w czasie kompilacji. Na przykład załóżmy, że mam napisane:Czy mogę uzyskać nazwy typu C++ w sposób constexpr?
constexpr size_t my_strlen(const char* s)
{
const char* cp = s;
while(*cp != '\0') { cp++; };
return cp - s;
}
i teraz chcę mieć:
template <typename T>
constexpr auto type_name_length = my_strlen(typeid(T).name());
Ale niestety, to tylko const char*
typeid(T).name()
, nie constexpr ... czy jest jakiś inny, constexpr sposób uzyskać nazwę typu?
Co masz zamiar zrobić z 'type_name_length', że potrzebujesz jej podczas kompilacji? Kompilatory są całkiem dobre, jeśli chodzi o ocenę 'strlen()' i daje stałą wartość, jeśli jest to możliwe. –
Barry
@ Barry: Chciałem tylko MCVE tutaj, więc zrobiłem syntetyczny użytek. – einpoklum
@einpoklum To jest dobre; ale dodanie komentarza mówiącego, że w pytaniu (to jest tylko MCVE, naprawdę próbuję X) jest również dobre. – Yakk