Предположим, у меня есть вектор символов (или просто пара итераторов), который я хочу напечатать в ostream. Теперь я не просто хочу, чтобы это было напечатано - я хочу, чтобы у него были определенные типы интервалов, я хочу другое представление значений символов, а не просто вычеркивание их на терминал (скажем, как символ, если он доступен для печати, так и экранированный 2 -значное или шестнадцатеричный кодВременно переопределить поведение выходного потока.
Теперь я не хочу, чтобы написать свой собственный код за пределы минимума. - то есть только немного клея и
void foo(ostream& os, char c) {
os << c << ' ' << as_hex(c);
}
(который, как пользовательские перегрузки для оператора < < без возврата.)
Я не хочу, чтобы нужно было петли над vecotr, и для каждого символа t o вручную вызывать abve, я хочу, чтобы он вел себя и выглядел так, как будто я просто связываю свой вектор с моим потоком outoput, после того как временно изменил атрибуты последнего. Но иногда я хочу, чтобы поток возвращался, чтобы вести себя нормально, даже для одного и того же вектора.
Можно ли это сделать разумно/идиоматично?
Это не делает трюк, так как мне нужно перегрузки быть * временный * - Мне нужно, чтобы иметь возможность его включения или выключения , – einpoklum
@einpoklum Добавьте 'std :: cout.iword (vprint_index) = 0;' после этого. Если вам нужно, чтобы он работал только на одной операции (нелипкий манипулятор), попросите оператора очистить его сам. –
@Revolver_Ocelot «временное переопределение» форматирования потока может означать одну из двух вещей: либо серию одноразовых манипуляций (где поток автоматически возвращается после каждого вызова - моя интерпретация), либо изменение состояния (видимо, ваше). Я отвечаю на ваш ответ, поскольку он правильно находит место для хранения состояния (для последней интерпретации). Поскольку вопрос плохо сформулирован и неясен, невозможно установить первоначальное намерение (и это не имеет большого значения). –