|
|
||||||
Шаблоны и исключения28.07.2020, 13:04. Показов 1829. Ответов 39
Метки нет (Все метки)
Допустим есть код нечто вроде следующего:
(и по хорошему наверное должно работать и с иными вариациями) и возникает вопрос как бросать вразумительные исключения учитывая char/wchar_t? 1. Очевидно что делать исключение тоже шаблонным будет плохо главным образом потому что не очевидно для пользователя. 2. Конвертировать строки значит привязываться кодировкам (системе или библиотеки) и не понятно какие будут тут нюансы. 3. Я вижу только один выход уходить от исключений использовать возврат значения с методом возвращающим описание, примерно как в Qt. Есть другие варианты?
0
|
||||||
| 28.07.2020, 13:04 | |
|
Ответы с готовыми решениями:
39
Шаблоны и исключения Организация собственного исключения и передача в него исходного исключения Хранить шаблоны документов в базе и выводить данные в эти шаблоны |
|
Комп_Оратор)
|
|||||||||||
| 29.07.2020, 00:55 | |||||||||||
|
Может я не понял в чем суть. Но в качестве размышлений на тему (корявых, но как идея).
То же не шибко красиво, но сам класс исключений уже не шаблонный:
0
|
|||||||||||
|
|
||
| 29.07.2020, 11:46 [ТС] | ||
|
Добавлено через 1 минуту IGPIGP, А ничего что вывод ошибки зашит на сout ?
0
|
||
|
Комп_Оратор)
|
|||||||
| 29.07.2020, 13:22 | |||||||
Добавлено через 1 час 29 минут Ну и в конце концов сами std::cerr и std::wcerr тоже работают на разных типах символов. https://en.cppreference.com/w/cpp/io/cerr То есть, в предложенном подходе оно отражено.
0
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 29.07.2020, 13:32 | ||
|
а к примеру под китайской виндой может быть какая нибудь GB-18030 и вот как ты весь этот зооопарк теперь собираешься разруливать? а теперь представь себе: я даю тебе готовый lib или dll. и ты знаешь: what() всегда возвращает utf-8.и тебе уже не важно кто именно собирал эту библиотку: араб, китаец, или русский. юникод специально для того и придумали, что бы жизнь людей стала проще. зы: зачем вообще локализировать описание ошибок ? сами же себе гемморой на задницу придумываете.
0
|
||
|
|
|||||
| 29.07.2020, 14:07 [ТС] | |||||
|
Добавлено через 1 минуту Добавлено через 1 минуту
0
|
|||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 29.07.2020, 14:20 | ||||
|
такое впечатление начинает складываться, что ты решаешь какую то XY-проблему. приведи хоть один пример, зачем это может быть нужно ? в нашем реальном и не-идеальном мире. ты походу не уловил ситуацию: тебе на руки дали dll. и хрен его знает какая там была кодировка - на машине, где эта dll была собрана. и вот в какой кодировке она тебе возвращает результат ? может быть cp1251, а может быть GB-18030 а может быть одна dll работает с cp1251, а другая - с GB-18030 а тебе мудохаццо теперь со всем этим зоопарком. и это - ахренительная проблема. настолько ахренительная, что для решения этой проблемы, в край задолбавшиеся человечество было вынужденно изобрести unicode. юникод был разработан специально для решения этой проблемы. если чо.
0
|
||||
|
|
||||
| 29.07.2020, 16:07 [ТС] | ||||
|
Добавлено через 59 секунд Добавлено через 2 минуты
0
|
||||
|
Комп_Оратор)
|
||
| 29.07.2020, 16:34 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||
| 29.07.2020, 17:06 | ||||||||||
|
ты осознаешь что речь идет о выводе текста эксепшена?
собственно, именно по этой причине и страдают любители национальных символов в аргументах командной строки. в какой именно кодировке задан текст командной строки? это зависит от конкретной платформы. нормальные люди делают просто: на конкретной платформе известно в какой кодировке задан текст аргументов командной строки они берут этот текст, и зная в какой он кодировке, перегоняют его в юникод (обычно это utf-8). функция конвертации пишется под ключ конкретной платформы (реализация не кросс-платформенная) а вот весь остальной проект уже работает с юникодом (utf-8), и никак не зависит от настроек локали. в твоём случае можно взять аргументы командной строки, и перегнать их в utf-8. сам парсер работает с utf-8, и не зависит ни от кодовой страницы Windows, ни от Windows вообще. ты, конечно, можешь прибиться гвоздями к cp1251. но тогда твоим софтом будут пользоваться только русские пользователи русско-язычной винды.
0
|
||||||||||
|
|
||||||
| 29.07.2020, 17:07 [ТС] | ||||||
|
Может дополнить код так что бы стало понятным
0
|
||||||
|
Комп_Оратор)
|
||
| 29.07.2020, 17:08 | ||
|
Avazart, мы же знаем что throw это такой себе return где вы можете вернуть разные типы. Но если пытаться вернуть шаблон, то ловить придётся инстансы? То есть, придётся написать столько кэтчей сколько интсансов вы потенциально можете бросить? В принципе, я даже хочу попробовать. Но боюсь, счастья это не прибавит. Я не уверен что можно кинуть не шаблонный объект в котором лежит шаблонный тип.
0
|
||
|
|
|||||
| 29.07.2020, 17:17 [ТС] | |||||
|
Добавлено через 1 минуту Добавлено через 6 минут См. п.1 IGPIGP,
0
|
|||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||
| 29.07.2020, 17:20 | |||||||||||||
|
вот нахера тебе это нужно? вот я беру и просто логгирую весь текст "как есть"
если там не только английский текст, тогда utf-8 его корректно воспримет, но все равно не понятно - нафиг нужно национальное имя включать в диагностику эксепшена? ты в сосстоянии внятно сформулировать какую проблему ты пытаешься решить?
0
|
|||||||||||||
|
Комп_Оратор)
|
||
| 29.07.2020, 17:22 | ||
|
В коде вы сами показали объявление инстанса на типе char и это вполне конкретный тип. И это путь - "Многие инстансы, - многие кэтчи". Это реализуемо. В чём вопрос всё равно не ясно.
0
|
||
|
Комп_Оратор)
|
||||
| 29.07.2020, 17:40 | ||||
|
И вот ещё что. У catch нет типа возврата не спроста. Он нужен для обработки внутри ситуации когда всё не хорошо. Оттуда впринципе можно попытаться логировать даже в файл но нет гарантии что даже std::log/wlog поймает всё в буфер. Вот почему не понятно зачем где-то объект инстанса отлавливать. Но можно в принципе, если я верно понял. Два catch один за другим. Один пытается ловить String<char> а другой String<wchar_t>, но что это вам даст? Если логика разная то может и нужны разные обработчики. Я написал схему которой всё равно. Там и логику можно ветвить, но без юзера. Хотя при желании ему можно предложить переопределить какой-то метод который изначально ничего не делает и вызывается в обработчике там где нужно по-разному отхепибёрздить...
0
|
||||
|
Комп_Оратор)
|
||
| 30.07.2020, 00:06 | ||
|
0
|
||
| 30.07.2020, 00:06 | |
|
Чем отличаются шаблоны HTML и шаблоны WordPress «Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами».
Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны Исключения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|