Я считаю, что изменение способа потоковой передачи на основе объекта, который вы передаете, - ужасная идея, которая полностью игнорирует весь смысл работы потоковых объектов.Итак, я бы создал класс-член или функцию, которая возвращает объект типа, который по-разному обрабатывает поток.Так, например, если вы хотите предоставить цветной поток, вы бы позвонили:
std::cout << myclass.colorstreamer << endl;
Редактировать:
Ваше предложение по обработке потоков - плохая идеяпотому что вы понятия не имеете, как другие люди будут использовать ваш код.Совершенно неинтуитивно для потока вести себя по-разному в зависимости от того, какой объект выполняет потоковую передачу.Я сравниваю это с наличием функции, которая возвращает другой результат в зависимости от того, кто ее вызвал, а не от того, каковы ее аргументы, хотя я признаю, что технически поток является аргументом.
Что касается того, как это сделать, этоодин из способов - создать colorstreamer
, сделать этот новый класс членом myclass
и сделать myclass
членом colorstreamer
, а затем сделать потоковый оператор colorstreamer
другом myclass
,Меня больше беспокоит семантика вызова функции (т. Е. Использование .colorstreamer
для управления потоком, а не сам поток), чем вопрос о том, как ее реализовать.Мое предложение о том, как это реализовать, вполне возможно, плохой способ сделать это;мой C ++ ржавый.