## Обсуждение дизайна библиотеки ### Поддержка Unicode **Unicode-поддержка** в библиотеке означает: * Возможность парсинга как char*, так и wchar_t* * Возможность указания типа обработки для каждой опции (ASCII или Unicode) * Гарантии корректной конвертации данных ### Основные гарантии библиотеки * ASCII-вход передается в ASCII-значение без изменений * Unicode-вход передается в Unicode-значение без изменений * При несовпадении типов происходит автоматическая конвертация через codecvt ### Особенности реализации **Смешанная поддержка** ASCII и Unicode: * Возможность использования обоих типов опций одновременно * Отсутствие необходимости писать дополнительный код для Unicode * Совместимость с существующими библиотеками ### Проблемы реализации **Основные сложности**: * Сравнение Unicode-строк * Интернационализация имен опций * Необходимость дополнительных настроек для корректной работы ### Подход к реализации **Варианты реализации**: 1. Шаблонное решение с std::basic_string 2. Внутренняя кодировка с конвертацией на границах **Выбранный подход**: * Использование внутренней кодировки UTF-8 * Конвертация только при необходимости * Минимизация накладных расходов ### Компоненты системы **Парсеры**: * Работа с входными строками * Конвертация в internal encoding * Хранение результатов в parsed_options **Описания опций**: * Поддержка смешанных типов * Дополнительная информация о кодировке * Гибкая обработка значений **Хранение данных**: * Конвертация при сохранении * Информирование о типе кодировки * Корректная работа с разными типами ### Выбор внутренней кодировки **Критерии выбора**: * Скорость обработки * Затраты памяти * Размер кода **Принятое решение**: UTF-8 как внутренняя кодировка из-за: * Универсальности * Эффективности для ASCII-данных * Простоты интеграции с существующими компонентами ### Особые случаи **Важные моменты**: * Предполагается ASCII-кодировка для символьных литералов * Учет возможных проблем с комбинирующими символами * Практическая нерелевантность проблем в большинстве случаев Такой подход обеспечивает баланс между функциональностью, производительностью и простотой использования библиотеки.