C++ 11 ha due nuovi tipi di dati di carattere integrale, char16_t
e char32_t
. Mi piacerebbe emularli per i compilatori che non hanno un tipo distinto per sovraccaricare le operazioni di I/O per vederli un carattere invece del loro valore intero.Completamente emulando tipi distinti di componenti distinti (in particolare: char16_t e char32_t)
Questi sono i requisiti:
- distinti (senza
typedef
). - esatta larghezza su sistemi normali (ala uint16_t e uint32_t)
- altre C++ 11 caratteristiche sono consentiti (vedi sotto primo tentativo)
- deve giocare bello con letterali;
char16_t c16 = u"blabla unicode text blabla";
deve funzionare. - se char16_t può essere utilizzato negli operatori matematici, ovviamente anche questo deve funzionare.
Il mio primo tentativo che fallisce nel reparto letterale era un enum fortemente tipizzato:
enum char16_t : uint16_t;
Questo ha altri svantaggi pure, che potrebbe forse essere risolto fornendo agli operatori necessari me stesso (che è davvero per me andava bene).
Non è chiaro il motivo per cui si sta tentando questo o quali strumenti si desidera vengano utilizzati. Il "primo tentativo" utilizza C++ 11. Non c'è modo di ottenere i letterali Unicode da un compilatore senza supporto Unicode garantito e nessun modo per manipolare le stringhe in fase di compilazione senza un compilatore C++ 11 recente. – Potatoswatter