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