no sé si lo que estoy escribiendo tiene sentido, pero Me acuerdo que vi una función ivoked así:¿es posible pasar stringstream como parámetro de función?
my_func(ss << "text" << hex << 33);
¿Es posible?
no sé si lo que estoy escribiendo tiene sentido, pero Me acuerdo que vi una función ivoked así:¿es posible pasar stringstream como parámetro de función?
my_func(ss << "text" << hex << 33);
¿Es posible?
Sure thing. ¿Por qué no sería? Ejemplo de declaración de dicha función:
void my_func(std::ostringstream& ss);
gracias, lo que extrañé, sabía que era algo posible pero no sabía qué declaración usar para lograr ese efecto – rsk82
Excepto que el tipo de 'ss <<" prueba "<< hex << 33' no es 'std :: stringstream &', pero 'std :: ostream &', y eso no coincidirá con la firma dada. –
@James Kanze Eso es, por supuesto, correcto. –
¡Absolutamente! Asegúrese de pasarlo por referencia, no por valor.
void my_func(ostream& stream) {
stream << "Hello!";
}
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
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.
¿No debería ser tan difícil de probar? – aztaroth