Vorrei utilizzare il nome di un tipo in fase di compilazione. Per esempio, supponiamo che ho scritto:Posso ottenere nomi di tipo C++ in modo constexpr?
constexpr size_t my_strlen(const char* s)
{
const char* cp = s;
while(*cp != '\0') { cp++; };
return cp - s;
}
e ora voglio avere:
template <typename T>
constexpr auto type_name_length = my_strlen(typeid(T).name());
Ma, ahimè, typeid(T).name()
è solo const char*
, non constexpr ... c'è qualche altro modo constexpr per ottenere il nome di un tipo?
Cosa intendi fare con 'type_name_length' ne hai bisogno al momento della compilazione? I compilatori sono piuttosto bravi a valutare semplicemente 'strlen()' e a darti una costante se possibile. –
Barry
@Barry: Volevo solo un MCVE qui, quindi ho inventato un uso sintetico. – einpoklum
@einpoklum Questo è buono; ma aggiungere un commento dicendo che nella domanda (questo è semplicemente un MCVE, sto davvero provando a X) è anche buono. – Yakk