Можно ли передать stringstream в качестве параметра функции?

можно ли передать в stringstream и иметь функцию write к нему напрямую?

Я помню, что видел функцию, вызываемую аналогично чему-то вроде этого:

my_func(ss << "text" << hex << 33);

4 ответов


конечно. Почему бы и нет? Пример объявления такой функции:

void my_func(std::ostringstream& ss);

абсолютно! Убедитесь, что вы передаете его по ссылке, а не по значению.

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