C ++ Boost io streams, обработка ошибок - PullRequest
3 голосов
/ 20 июля 2009

Можно ли сделать так, чтобы пользовательский поток работал как stanadrd в отношении ошибок? То есть по умолчанию использовать биты хороший / неудачный / плохой / eof, а не исключения?

В документах надстройки упоминается только выдача std :: fail для потоковых ошибок и возможность распространения других ошибок (например, badalloc при попытке выделить буфер), однако код надстройки, похоже, не перехватывает их, вместо этого полагаясь на пользователя код для их обработки, но весь мой существующий код опирается на методы good (), bad () и т. д. и метод clear () в тех случаях, когда необходимо повторить попытку после ошибки.

1 Ответ

1 голос
/ 04 апреля 2012

С http://www.trip.net/~bobwb/cppnotes/lec08.htm

Состояние ошибки можно установить с помощью:

void clear (iostate = 0);

Нулевое значение по умолчанию приводит к установке ios_base :: goodbit.

ясно ();

, следовательно, эквивалентно

ясно (0);

, что эквивалентно

ясно (ios_base :: goodbit);

Обратите внимание, что ios_base :: goodbit является ненулевым значением. clear () может использоваться для установки одного из других битов как часть кода программиста для оператора >> () для определенного объекта. Например:

if (bad_char) is.clear (ios_base :: badbit); // устанавливаем бэдбит istream

...