Если функция выполняет собственный файловый ввод / вывод, это будет непросто (поэтому существует руководство по разработке программного обеспечения с разделением задач, которое, по-видимому, здесь нарушается). Перегрузка operator <<
не поможет, функция не возвращает значение, которое такой оператор мог бы поместить куда-либо.
Если вы можете изменить функцию, пусть она примет аргумент, который является объектом ostream
для записи (по умолчанию это cout
).
Если вы не можете изменить функцию, но она использует std::cout
, вы можете использовать cout.rdbuf(newbuffer)
для перенаправления std::cout
, связав ее с другим пунктом назначения.
Если функция использует какую-то другую библиотеку ввода / вывода, вам, возможно, придется использовать freopen
или даже dup2
для переназначения stdout
(дескриптор стандартного выходного файла ОС) в другое место назначения.
И будьте осторожны, любой из методов, включающих перенаправление (т. Е. cout.rdbuf
, freopen
и dup2
), создаст большой беспорядок в любой многопоточной программе. Это, вероятно, не относится к вам, как начинающему программисту, но когда вы начинаете с многопоточности, вам нужно спроектировать свои функции ввода-вывода так, чтобы они использовали любой поток, который вы хотите, глобальные решения просто не будут его сокращать.