ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
1053267 Топик полностью
fk0, легенда (18.11.2020 01:58, просмотров: 155) ответил LightElf на Туплю к вечеру. Есть ли готовый рецепт, как в compile-time преобразовать текстовую строку в юникод? Т.е. где-то в заголовках есть определение
На чистом C скорей нельзя: если строку можно, потенциально, разобрать на constexpr буковки через "STR"[1], "STR"[2]..., то длину строки на уровне макропроцессора -- не выявить. На C++ можно сделать, начиная с C++11. Подходы могут быть немного разные: 

1) в C++11 есть ряд проблем: нет user defined literals (способных элементарно разбит строку по дискретным буковкам видимым в пространстве типов) и std::array, std::initializer_list имеют не-constexpr аксессоры (не написать рекурсивную функцию, которая строит std::array из первой буковки и нуля, а далее выливает воду из чайника). Вопрос со склейкой результата по-видимости толком не решается, я не придумал как, но можно, если разбили по буковкам, рекурсивно передать в variadic шаблон прямо вместе с нулями и на финальной итерации вернуть std::array нужного размера. Как-то так:


Coliru Viewer



2) в C++14 и старше, как сказано выше и на буковки побить легко, и промежуточные результаты (std::array) можно друг друго инициализировать и следовательно легко написать рекурсивную функцию.

[ZX]