Redireccionamiento en C ++

#include <iostream>
#include <fstream>
using namespace std;

void foo(){
  streambuf *psbuf;
  ofstream filestr;
  filestr.open ("test.txt");
  psbuf = filestr.rdbuf(); 
  cout.rdbuf(psbuf);    
}

int main () {
  foo();
  cout << "This is written to the file";
  return 0;
}

¿Cout escribe en el archivo dado?

Si no, ¿hay alguna manera de hacerlo sin enviar las variables a foo, comonew?

actualizar :

No puedo usar una solución que use class o global, por lo que algunos pueden darme una solución que use new. También pasando de main a foo

streambuf *psbuf;
ofstream filestr;

debería funcionar bien?

Estoy tratando de hacer esto pero no funciona. Le paso el flujo a foo para que exista en el main para que no termine cuando foo termine.

 void foo(streambuf *psbuf){

  ofstream filestr;
  filestr.open ("test.txt");
  psbuf = filestr.rdbuf(); 
  cout.rdbuf(psbuf);    
}

int main () {
streambuf *psbuf
  foo(psbuf);
  cout << "This is written to the file";
  return 0;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta