Использование std::format для форматирования текстов char8_t, char16_t и char32_t в C++ 20 ⇐ C++
-
Anonymous
Использование std::format для форматирования текстов char8_t, char16_t и char32_t в C++ 20
Я работал над кодом кросс-платформенного движка, и для хранения и передачи текстовых данных unsigned short был своего рода лучшим типом, поскольку в Windows он такой же, как wchar_t, а на Mac - как unichar, на котором ретранслируется NSString ( wchar_t на Mac по какой-то причине 32-битный по размеру). С новым C++ 20 и появлением char16_t я заменил на него свой общий беззнаковый короткий тип и начал максимально оптимизировать код, и всякий раз, когда было возможно, использовать один и тот же код для обеих ОС (Mac и Win). Новый char16_t работал отлично, пока я не перешел к форматированию и не увидел, что std::format еще не поддерживает его.
Пропробовал множество решений, в итоге использовал библиотеку FMT, поддерживающую форматирование char16_t, только чтобы увидеть, что ее код очень похож на код std::format (оба сделал один и тот же человек), поэтому я задался вопросом, можно ли сделать std ::format для работы со всеми типами символов.
После некоторой работы и предоставления отсутствующего кода (шаблоны форматирования для других типов символов) я получил только известную ошибку >> C2491: 'std::numpunct::id': определение статического элемента данных dllimport не разрешено <
Я работал над кодом кросс-платформенного движка, и для хранения и передачи текстовых данных unsigned short был своего рода лучшим типом, поскольку в Windows он такой же, как wchar_t, а на Mac - как unichar, на котором ретранслируется NSString ( wchar_t на Mac по какой-то причине 32-битный по размеру). С новым C++ 20 и появлением char16_t я заменил на него свой общий беззнаковый короткий тип и начал максимально оптимизировать код, и всякий раз, когда было возможно, использовать один и тот же код для обеих ОС (Mac и Win). Новый char16_t работал отлично, пока я не перешел к форматированию и не увидел, что std::format еще не поддерживает его.
Пропробовал множество решений, в итоге использовал библиотеку FMT, поддерживающую форматирование char16_t, только чтобы увидеть, что ее код очень похож на код std::format (оба сделал один и тот же человек), поэтому я задался вопросом, можно ли сделать std ::format для работы со всеми типами символов.
После некоторой работы и предоставления отсутствующего кода (шаблоны форматирования для других типов символов) я получил только известную ошибку >> C2491: 'std::numpunct::id': определение статического элемента данных dllimport не разрешено <
Мобильная версия