Подтвердить что ты не робот

Существует ли типичный шаблон для обработки строковых символов в исключениях?

Стандартная С++ std::exception::what() возвращает узкую строку символов. Поэтому, если я хочу разместить там большое текстовое сообщение, я не могу.

Есть ли общий способ/шаблон/library/для того, чтобы обойти это?

EDIT. Чтобы быть ясным, я мог бы просто написать свой собственный класс исключений и наследовать его, но мне любопытно, есть ли более или менее стандартная реализация этого. boost::exception, кажется, делает большую часть того, о чем я думал....

4b9b3361

Ответ 1

Основываясь на этом сообщении Исключения с Unicode what(), я решил сделать что-то вроде этого:

class uexception : public std::exception {
public:
    uexception(LPCTSTR lpszMessage)
        : std::exception(TCharToUtf8(lpszMessage)) { }
};

Всюду в моей базе кода я предполагаю, что .what() вернет строку, которая закодирована в UTF-8. Мои процедуры преобразования от UTF-8 до TCHAR будут пропускать непризнанные последовательности UTF-8 и заменять их на. Таким образом, если .what() возвращает то, что недействительно UTF-8, это не будет эпическим сбоем.

Код не был скомпилирован (позже сегодня - сначала нужно исправить некоторые другие вещи:):). Я также извиняюсь за MFC-isms, но я думаю, что сообщение все равно пройдет.

Ответ 2

Вы можете поместить что-нибудь там, но если сторонний код ожидает const char* из what(), вы должны вернуть const char* из него.

Для вашего кода - просто введите std::exception и добавьте метод const wchar_t* wwhat().

Ответ 3

Ну, в Qt вы получаете QString для строк, и эта строка всегда находится в юникоде. Не то чтобы вам нужно было искать Qt только ради исключений, но все же:)