Возможно, вы хотите получить доступ к строке, в которой поток строк хранит свои данные:
void doStuff(const std::stringstream& msg)
{
std::cerr << msg.str() << std::endl;
}
В вашем коде происходит следующее: iostreams
содержит void* operator
, который возвращает 0, если поток содержит какую-либо ошибку или достиг EOF, и другое значение в противном случае. Это полезно для проверки ошибок.
Когда вы пытаетесь записать ваш поток в std::cerr
, компилятор понимает, что поток может быть преобразован в void *, используя этот оператор, и что void * может быть записан в ostream (оператор << был определяется), и, следовательно, использует его. </p>
Обратите внимание, что я изменил сигнатуру метода, чтобы он получал std :: stringstream в качестве аргумента, поскольку std :: iostream :: str не определен (этот метод доступен только для потоков строк).