Я разрабатываю приложение, которое в основном будет использоваться читателями на английском и испанском языках. Однако в будущем я хотел бы иметь возможность поддерживать более расширенные языки, такие как японский. Размышляя о дизайне программы, я наткнулся на стену в сравнении UTF-8, UTF-16 и multibyte. Я хотел бы скомпилировать свою программу для поддержки UTF-8 или UTF-16 (если используются такие языки, как китайский). Чтобы это произошло, я подумал, что у меня должно быть что-то вроде
#if _UTF8
typedef char char_type;
#elif _UTF16
typedef unsigned short char_type;
#else
#error
#endif
Таким образом, в будущем, когда я буду использовать UTF-16, я могу переключить #define (и, конечно же, использовать тот же тип # if / # endif для таких вещей, как sprintf
и т. Д.). У меня есть свой собственный строковый тип, так что я тоже могу использовать этот случай.
Будет ли замена любого использования только одного использования «char» моим «char_type» с использованием сценария, упомянутого выше, считаться «плохой идеей»? Если да, то почему это считается плохой идеей и как я могу достичь того, о чем упоминал выше?
Причина, по которой я хотел бы использовать тот или иной, связана с эффективностью памяти. Я бы предпочел не использовать UTF-16 все время, если я его не использую.
char32_t
, если можете, и предоставьте чистые интерфейсы. - person Kerrek SB   schedule 22.01.2012