Можно ли передать stringstream в качестве параметра функции?
можно ли передать в stringstream и иметь функцию write к нему напрямую?
Я помню, что видел функцию, вызываемую аналогично чему-то вроде этого:
my_func(ss << "text" << hex << 33);
4 ответов
абсолютно! Убедитесь, что вы передаете его по ссылке, а не по значению.
void my_func(ostream& stream) {
stream << "Hello!";
}
my_func
должен иметь подпись по образцу:
void my_func( std::ostream& s );
, так как это типа ss << "text" << hex << 33
. Если цель
чтобы извлечь сгенерированную строку, вам нужно сделать что-то вроде:
void
my_func( std::ostream& s )
{
std::string data = dynamic_cast<std::ostringstream&>(s).str();
// ...
}
обратите внимание, что вы не можете использовать временный поток;
my_func( std::ostringstream() << "text" << hex << 33 );
не будет компилироваться (за исключением, возможно, с VC++), так как это не законный C++. Вы мог бы написать что-то вроде:
my_func( std::ostringstream().flush() << "text" << hex << 33 );
если вы хотите использовать временное. Но это не очень удобно дружелюбный.
да, и
Function(expresion)
сделает выражение, которое будет оценено первым, и результат его будет передан как параметр
Примечание: оператор возвращает ostream