Нужна помощь / совет о том, как проверить ostream, переданный функции - PullRequest
2 голосов
/ 13 сентября 2011

У меня есть функция, которая передает ostream ему.Мне нужно проверить ostream, чтобы убедиться, что он будет работать.Я поместил оператор print в блок try с оператором catch, чтобы перехватить все исключения.Теперь, чтобы проверить, будет ли это работать, мне нужна небольшая помощь в создании плохого ostream для прохождения функции.

Я пробовал это:

filebuf buffer;
ostream& out = ostream(&buffer);
test1.print(out);

Но когда я проверяю это, я не могу получить свое сообщение об ошибке для печати.Что может быть лучше для создания плохого ostream для передачи в функцию.

Кроме того, есть ли лучший способ проверить ostream, чем использовать блок try-catch?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

Потоки, как правило, не генерируют исключения, когда они не работают, поэтому я не ожидаю, что ваше сообщение об ошибке будет напечатано независимо от того, прошла ваша операция успешно или нет.

Базовый класс ios имеет функцию под названием exceptions, которую можно использовать для управления этим, но довольно антисоциально писать функцию, которая изменяет состояние аргумента, как этот, поэтому вам, возможно, придется обязательно восстановите его (даже если оно выдает исключение ...)

Обычный способ проверить успешность операции в потоке - это if. Поток оценивается как истинное значение, если все в порядке, в противном случае - ложное значение, под которым я подразумеваю значение истинное / ложное, что касается условных выражений, а не bool значения true или false.

Точнее, неверно, если установлен failbit или badbit. Последняя операция «не работала» тогда и только тогда, когда установлена ​​хотя бы одна из них.

2 голосов
/ 13 сентября 2011

Как насчет ofstream, который не открыт ни для одного файла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...