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

Я не знаю, имеет ли смысл то, что я пишу, но я помню, я видел функцию, подобную этой:

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

Возможно ли это?

Ответ 1

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

void my_func(std::ostringstream& ss);

Ответ 2

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

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

Ответ 3

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 );

не будет компилироваться (кроме, может быть, с VС++), так как это не легальный С++. Вы может написать что-то вроде:

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

если вы хотите использовать временный. Но это не очень удобно.

Ответ 4

Да, и

Function(expresion)

Сначала будет вычислено выражение, и результат его будет передан как параметр

Примечание: Оператор < < для ostreams возвращает ostream