Ответ 1
Конечно. Почему бы и нет? Пример объявления такой функции:
void my_func(std::ostringstream& ss);
Я не знаю, имеет ли смысл то, что я пишу, но я помню, я видел функцию, подобную этой:
my_func(ss << "text" << hex << 33);
Возможно ли это?
Конечно. Почему бы и нет? Пример объявления такой функции:
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 );
не будет компилироваться (кроме, может быть, с VС++), так как это не легальный С++. Вы может написать что-то вроде:
my_func( std::ostringstream().flush() << "text" << hex << 33 );
если вы хотите использовать временный. Но это не очень удобно.
Да, и
Function(expresion)
Сначала будет вычислено выражение, и результат его будет передан как параметр
Примечание: Оператор < < для ostreams возвращает ostream