C++ (стандарт) исключения и Unicode

глупо, если кто-то еще сталкивается с этим изменением ошибки

 userData[targetUser.id + message.guild.id] = {
        userData: userData[targetUser.id + message.guild.id].money += moneyAmount
      };

на

 userData[targetUser.id] = {
        userData: userData[targetUser.id].money += moneyAmount
      };

, я помещаю message.guild.id в неправильное место

10
задан Joris Timmermans 6 March 2009 в 08:56
поделиться

5 ответов

Я думаю, что объяснение Peter Dimov, как указано в инструкциях по обработке ошибок Повышения покрывает это хорошо:

Не волнуйте слишком много по поводу, какой () обменивается сообщениями. Хорошо иметь сообщение, что программист получает возможность выяснения, но Вы очень вряд ли сможете сочинить соответствующее и понятное пользователем сообщение об ошибке в точке, исключение выдается. Конечно, интернационализация выходит за рамки автора класса исключений. Peter Dimov приводит превосходный аргумент, что надлежащее использование, что () строка должна служить ключом в таблицу средств форматирования сообщения об ошибке. Теперь, если только мы могли бы быть стандартизированы, что () представляет в виде строки для исключений, выданных стандартной библиотекой...

8
ответ дан 4 December 2019 в 01:03
поделиться

(Я добавляю ответ на свой собственный вопрос после понимания из-за ответа Flodin),

В моем особом случае у меня есть строка, которая может содержать unicode символы, которые я анализирую и таким образом ожидаю быть в определенном формате. Парсинг может привести к сбою и выдать исключение, чтобы указать, что проблема произошла.
Первоначально я намеревался создать читаемое программистом сообщение в исключении, которое детализирует содержание строки, где, анализируя отказавший, и это - то, где я столкнулся с проблемой, потому что сообщение об исключении стандартного исключения не может содержать unicode символы.

Однако новый дизайн, который я рассматриваю, должен возвратить местоположение ошибки анализа в строке через механизм исключения в станд.:: производный класс исключения. Процесс создания читаемого программистом сообщения, которое содержит части строки, вызывающей ошибку, может быть делегирован к обработчику вне класса. Это чувствует себя подобно намного более чистому дизайну мне.

Спасибо за вход, всех!

2
ответ дан 4 December 2019 в 01:03
поделиться

Если Вы действительно хотите Unicode, Вы могли UTF-8 кодировать сообщение об исключении, добавлять BOM в начале, таким образом, можно сказать, является ли сообщение об исключении UTF-8, сырыми данными char, или другое кодирование, когда Вы готовите сообщение к выводу.

1
ответ дан 4 December 2019 в 01:03
поделиться

Мы используем наш собственный класс исключений. Если это не возможно, можно всегда переводить от Unicode до MBSC, представленного в текущем наборе символов – Вам обычно нужен этот текст только в течение короткого времени, и дальнейшее преобразование не является вопросом.

0
ответ дан 4 December 2019 в 01:03
поделиться

Я предложил бы произойти из станд.:: исключение и расширяет его для использования unicode строкового класса. Получение из станд.:: исключение приносит Вам пользу выполнения a:

catch (std::exception&)...

как Ваша последняя выгода и имеют его, ловят любое исключение, которое Вы, возможно, выдали (и STL). Где, как будто Вы создаете свое собственное основное исключение (и имеют Ваше другое исключение, происходят из того), необходимо было бы добавить другую выгоду.

Так или иначе я не думаю, что это действительно имеет значение, но я предпочитаю этот стиль (очевидно, это тратит впустую пустой станд.:: строка от станд.:: исключение, но я не думаю, что оно будет иметь большое значение).

0
ответ дан 4 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: