2012-05-31 31 views

Respuesta

11

Sure thing. ¿Por qué no sería? Ejemplo de declaración de dicha función:

void my_func(std::ostringstream& ss); 
+0

gracias, lo que extrañé, sabía que era algo posible pero no sabía qué declaración usar para lograr ese efecto – rsk82

+2

Excepto que el tipo de 'ss <<" prueba "<< hex << 33' no es 'std :: stringstream &', pero 'std :: ostream &', y eso no coincidirá con la firma dada. –

+0

@James Kanze Eso es, por supuesto, correcto. –

7

¡Absolutamente! Asegúrese de pasarlo por referencia, no por valor.

void my_func(ostream& stream) { 
    stream << "Hello!"; 
} 
1

Sí lo es, y

Function(expresion) 

Hará que la expresión que se evalúa en primer lugar y el resultado de que se pasa como un parámetro

Nota: Operator << for ostreams devuelve un ostream

3

my_func tiene que tener una firma en la línea de:

void my_func(std::ostream& s); 

, ya que ese es el tipo de ss << "text" << hex << 33. Si el objetivo es para extraer la cadena generada, you'ld tiene que hacer algo como:

void 
my_func(std::ostream& s) 
{ 
    std::string data = dynamic_cast<std::ostringstream&>(s).str(); 
    // ... 
} 

Nota también que no se puede utilizar una corriente temporal;

my_func(std::ostringstream() << "text" << hex << 33); 

no se compilará (excepto tal vez con VC++), ya que no es legal C++. Usted podría escribir algo como:

my_func(std::ostringstream().flush() << "text" << hex << 33); 

si desea utilizar un temporal. Pero eso no es muy fácil de usar.

Cuestiones relacionadas