Бьерн Страуструп.
Язык программирования С++
269
{
//
...
your_function(my_io_options);
//
...
}
Множество флагов можно установить с помощью функции flags(), например:
void your_function(int ios_options)
{
int old_options = cout.flags(ios_options);
//
...
cout.flags(old_options); //
reset options
}
Функция flags() возвращает старое значение множества флагов. Это позволяет переустановить
значения всех флагов, как показано выше, а также задать значение отдельному флагу. Например вызов
myostream.flags(myostream.flags()|ios::showpos);
заставляет класс myostream выдавать положительные числа со знаком + и, в то же время, не меняет
значения других флагов. Получается старое
значение множества флагов, к которому добавляется с
помощью операции | флаг showpos. Функция setf() делает то же самое, поэтому эквивалентная запись
имеет вид
myostream.setf(ios::showpos);
После установки флаг сохраняет значение до явной отмены.
Все-таки управление вводом-выводом с
помощью установки и отмены флагов - грубое и ведущее к
ошибкам решение. Если только вы тщательно не изучите свое справочное руководство и не будете
применять
флаги только в простых случаях, как это
делается в последующих разделах, то
лучше
использовать манипуляторы (описанные в 10.4.2.1). Приемы работы с состоянием потока лучше изучить
на примере реализации класса, чем изучая интерфейс класса.
Достарыңызбен бөлісу: